Rails(ã¨ãããActiveRecord)ã«åãä»ããã®ã¯å¤§å¤ã ããRailsã絡ã¾ãªãrubygemã«ã¯ãããªã«è¦å´ãªãåãæ¸ããã®ã§ãããããgemãæ¸ãæã«ã¯åãæ¸ãããã¨ãã人åãã«ä»ã®ã¨ãããªã¹ã¹ã¡ã®è¨å®ãç´¹ä»ãã¾ãã ã¨ãããèªåãå¿ããã®ã§ã¾ã¨ãã¦ããã¾ãã
ç¾ç¶ã¨ã¯steep-1.3.1, rbs-2.8.4ãæãã¾ãã
rbsã¯æ¢ã«3ç³»ãåºã¦ãã¾ãããä¸è¬å©ç¨è ãåæ¤æ»ã«å©ç¨ããå ´åã¯steepã使ãã¯ãã§ãsteepã¯ã¾ã rbsã®3ç³»ã«å¯¾å¿ãã¦ãã¾ãããã¾ããrbs-3.0ã§å¤å°å¤ãã£ã¦ããã¨ãããããã®ã§ãå²ã¨å¯¿å½ãçã話ããããã¾ããã
è¨å®ä¾
ã¨ããããçµè«ãããSteepfileã¨rbs_collection.yamlãä¿®æ£ãã¾ãã
Steepfile:
D = Steep::Diagnostic target :lib do signature "sig" check "lib" # Directory name # configure_code_diagnostics(D::Ruby.strict) # `strict` diagnostics setting # configure_code_diagnostics(D::Ruby.lenient) # `lenient` diagnostics setting configure_code_diagnostics do |hash| hash[D::Ruby::MethodDefinitionMissing] = :warning hash[D::Ruby::UnknownConstant] = :information end end
# Download sources sources: - name: ruby/gem_rbs_collection remote: https://github.com/ruby/gem_rbs_collection.git revision: main repo_dir: gems # A directory to install the downloaded RBSs path: .gem_rbs_collection gems: - name: steep ignore: true - name: rbs ignore: true - name: <developing gem name> ignore: true
ããããsteep init
, rbs collection init
ã§éå½¢ãçæã§ãã¾ãã
ãã®è¨å®ãããä¸ã§ãèªåãéçºä¸ã®gemã®åå®ç¾©ãsig以ä¸ã«æ¸ãã¦ããã¾ããlib以ä¸ã¨ãã¡ã¤ã«ãã¹ãæãã¦ã¨ãã£ã¿ã§åãæ¿ãæãæ§ã«è¨å®ãã¦ããã¨è¯ãã§ãããã
解説
Steepfile
Steepfileã§åæ¤æ»ãã¼ã«ã§ããsteepã®æåãå¶å¾¡ã§ãã¾ããsignatureã¨checkã¯ä½ãæå®ãã¦ããã®ãç°¡åãªã®ã§ãããconfigure_code_diagnostics
ãã¡ãã£ã¨åããã«ããã®ã¨ãå¿«é©ãªçµæãå¾ãããã«å°å³ã«éè¦ãªã®ã§ããããè¨å®ãã¦ããã¾ãã
ãã®è¨å®ã¯ãsteepãæ¤åºããåéç¥å¯¾è±¡ãã©ã®ã¨ã©ã¼ã¬ãã«ã«è¨å®ããããæå®ãã¾ããnilã«ã»ããããã¨å ±åããªããªãã¾ãã
steepã¯steep check
ã³ãã³ãã§åãæ¤æ»ã§ãã¾ããããã®æããã©ã«ãã®ã¨ã©ã¼éç¥ã¬ãã«ã¯warningã«ãªã£ã¦ãã¾ãããªã®ã§ãconfigureã§æå®ããéç¥å¯¾è±¡ã®ã¬ãã«ã:error
ã:warning
ã§ãªãã¨éç¥ãã¾ãããFailedã«ãªãã¾ãããã¨ã©ã¼éç¥ã¬ãã«ã¯--severity-level
ãªãã·ã§ã³ã§å®è¡æã«æå®ã§ãã¾ãã
ã§ã¯ãåéç¥å¯¾è±¡ã®ããã©ã«ãè¨å®ãã©ããªã£ã¦ãããã¨ããã¨ãç¾æç¹ã§æ確ãªããã¥ã¡ã³ãã¯ç¡ãã®ã§steepã®ã½ã¼ã¹ã³ã¼ããè¦ãå¿ è¦ãããã¾ããlib/steep/diagnostic/ruby.rb辺ãã«ããã¾ãã
ã½ã¼ã¹ã³ã¼ããåç §ããã¨åãããã§ãããããã©ã«ããä¸çªå³ããã¦ãstrict, lenientã®æºã«ç·©ããªãã¾ããèªåã®æè¦ã§ã¯ããã©ã«ãã¯å³ãéãã¦ãstrictã§ã¯ç·©éããæã¯ãã£ã¦ãç¾ç¶ã§ã¯åå¥ã«èª¿æ´ããæ¹ãè¯ãã¨æãã¦ãã¾ãã
ãã®ä¸ã§ãç¹ã«è¨å®ãã¦ãããæ¹ãè¯ãå¤ããä¸è¨ã®è¨å®ä¾ã§è¨è¼ããMethodDefinitionMissing
ã¨UnknownConstant
ã§ããMethodDefinitionMissing
ã¯åå®ç¾©ã«æ¸ãã¦ããã®ã«å®è£
ãåå¨ããªãå ´åã®è¦åã§ãUnknownConstant
ã¯åå®ç¾©ã®ç¡ãå®æ°ã»ã¯ã©ã¹ã»ã¢ã¸ã¥ã¼ã«ã«å¯¾ããåç
§ãã³ã¼ãä¸ã«åå¨ããæã®è¦åã§ãã
MethodDefinitionMissing
ã¯ããã©ã«ãã:informationã§ãèªåã¯ããã¯åç´ã«å®è¡ããæã«è¦åã¨ãã¦åºã¦æ¬²ããã®ã§warningã«å¤æ´ãã¾ããã
UnknownConstant
ã¯ãç¾ç¶åå®ç¾©ã®ç¡ãã©ã¤ãã©ãªãåç
§ããã®ãæ®éãªã®ã§ããã¼ãªãã·ã§ã³ã§å®è¡ãã¦ãã®warningãåºãã¨é常ã«çµæãç
©éã«ãªãã®ã§ã:informationã¬ãã«ã«è¨å®ãã¦ããªãã·ã§ã³æå®ãã¦æå³çã«è¦ããæã«ã ãå¼ã£ãããæ§ã«ãã¾ãããå®å
¨ã«ç¡å¹åããã¨ãgem_rbs_collectionã«ã©ã¤ãã©ãªã®åå®ç¾©ã追å ãããã¨ããã¢ããã¼ã·ã§ã³ã奪ãã®ã§ãç¡å¹åã¯ãã¦ãã¾ããã
ãã®ä»ã«ãã³ã¼ãã®ç¶æ³ã«å¿ãã¦ãç¾æç¹ã§ã¯å¿ è¦ç¡ããªã¨æãéç¥å 容ãããã°ã:informationã:hintã¬ãã«ã«ãã¦ããæ¹ãçµæãè¦æãããä¸ã§ã¯æç¨ã ã¨æãã¾ãã
rbs_collection.yaml
ããã¯rbs collection
ã³ãã³ãã®è¨å®ãã¡ã¤ã«ã§ããrbs collection
ã使ãã¨ãGemfileãgemspecã§ä¾åãã¦ããåã©ã¤ãã©ãªã®åå®ç¾©ãgem_rbs_collectionãªãã¸ããªããåå¾ãã¦ãã¦steepã«èªèããããã¨ãã§ãã¾ããã¾ããgemã®ä¸ã«sigãããå ´åã¯ãã¡ããåç
§ããæ§ã«ãªãã¾ãã
ããããç¾æç¹ã§ä½ãèããã«è¨å®ããã¨çµæ§ãããã¨ããããrbs collection init
ãã£ãä¸ã§è¨å®ãå¤æ´ããã«steepãå®è¡ããã¨ããã¡ããã¡ã大éã«ã¨ã©ã¼ãåºãã¨æãã¾ãã
ããã¯ãsteepã¨rbsã®gemèªä½ã«å«ã¾ãã¦ããsigãæ¤æ»ãããã¨ããã®ã§ãããã«å¿
è¦ãªåå®ç¾©ã足ãã¦ããªãã¨ãã¡ããã¡ãã¨ã©ã¼ãåºããã§ãããããã¦ãã®åæ¤æ»ã¯é常èªåã®geméçºã§ã¯ã»ã¼å¿
è¦ãç¡ããã®ã«ãªãã¾ãã(steepãrbsèªä½ãæ´»ç¨ãããã¼ã«ã¯å¥)
ãªã®ã§ãæ®éã®geméçºã§rbs collection
ãå©ç¨ããå ´åã¯ãsteepã¨rbsãé¤å¤ããè¨å®ã追å ãã¦ããå¿
è¦ãããã¾ãããã®è¨å®ä¾ã«ã¤ãã¦ã¯steepã®guidesãã£ã¬ã¯ããªã«è§£èª¬ãããã¾ãã (see. https://github.com/soutaro/steep/blob/master/guides/src/gem-rbs-collection/gem-rbs-collection.md)
ããä¸ã¤ã®åé¡ãDuplication declaration
ã¨ã©ã¼ãåºã¦ãã¾ããã¨ã§ãã
issueã«æ¸ããã¦ããã§ãããããã©ã«ãã ã¨rbs collection
ãéçºä¸ã®gemèªèº«ãèªèãã¦ãã¾ãã®ã§Steepfileã®sigã¨rbs collection
ãèªã¿ã«ããæåã§éè¤ãã¦ãã¾ããä¸è¨ã®ã¨ã©ã¼ã«ç¹ããã¾ãã
ãã®æåã¯ä»æ§ãªã®ãsteepã®ç®¡è½ãªã®ãrbsã®ç®¡è½ãªã®ãå¾®å¦ãªã©ã¤ã³ã ã¨æãã¾ãããç¾ç¶ä½ãã¬ã¤ãç¡ãã«äºã¤ãåæã«ä½¿ã£ã¦geméçºãããã¨ããã¨çµæ§ãããåé¡ã ã¨æãã¾ãã
ãã®åé¡ã«å¯¾ãã対çã¯ãSteepfileããsignature
æå®ãåé¤ãã¦rbs collection
ã«ä»»ããããrbs_collection.yamlã§éçºä¸ã®gemãignore対象ã«è¿½å ãã¦Steepfileã«ä»»ãããã®ã©ã¡ããã«ãªãã¾ããçµæã¯åããªã®ã§å¥½ã¿ã®ããæ¹ãé¸æãã¦ãã ãããä¸è¨ã®è¨å®ä¾ã§ã¯å¾è
ãæ¡ç¨ãã¦ãã¾ãã
ãã®è¾ºãã¯ãããã¡ã¯ãã¨ãªãããã¥ã¡ã³ãã¸ã®å°ç·ãããã°è§£æ±ºããã¨æãã¾ãããããã©ã«ãã®è¨å®å¤ãã©ããããã¯çµæ§é£ããåé¡ã§éçºä½é¨ã«ãçµæ§å½±é¿ããæã§ããä»å¾ã®ã¢ãããã¼ãã«ãã£ã¦ãããã£ããã¨ãä½ãæ°ã«ããå¿ è¦ããªããªãã¨è¯ãã§ããã
æè¿rbs-3.0ãåºãã°ããã ããä»å¾ã®å¤åã«æ³¨ç®ãã¦ããã¾ãããã