Upgrade to Pro — share decks privately, control downloads, hide ads and more …

詳解 "Fixing For Loops in Go 1.22" 自作linterをgola...

karamaru
June 08, 2024
49

詳解 "Fixing For Loops in Go 1.22" 自作linterをgolangci-lintへコントリビュートした話 @ GoConference2024

karamaru

June 08, 2024
Tweet

Transcript

  1. ΞδΣϯμجຊ৘ใ͸ඈ͹͠·͢ʂ😇 ϧʔϓม਺ϝϞϦڞ༗໰୊ͷ͓͞Β͍ TLJQ  'JYJOH'PS-PPQTJO(PzʹࢸΔ·Ͱͷٞ࿦ʙϓϩϙʔβϧΛಡΉ TLJQ  MPPQWBSύοέʔδͷ಺෦࣮૷ΛಡΉ N 

    Τεέʔϓղੳͱϧʔϓͷؔ࿈ੑΛಥ͖ࢭΊΔ N  पลπʔϧͱLBSBNBSVBMQIBDPQZMPPQWBSͷ঺հ T  ˏLBSBNBSV@BMQIBʹ4QFBLFS%FDL͋Γ·͢ʂ
  2. $PNQJMFSͷ͓࢓ࣄͬ͘͟Γ MPPQWBSύοέʔδͷ಺෦࣮૷ΛಡΉ TSDDNEDPNQJMF3&"%.&NE ɾTSDDNEDPNQJMFJOUFSOBMTZOUBY ɾTSDDNEDPNQJMFJOUFSOBMUZQFT ɾTSDDNEDPNQJMFJOUFSOBMJS ɾTSDDNEDPNQJMFJOUFSOBMEFBEDPEF ɾTSDDNEDPNQJMFJOUFSOBMJOMJOF ɾTSDDNEDPNQJMFJOUFSOBMEFWJSUVBMJ[F ɾTSDDNEDPNQJMFJOUFSOBMFTDBQF

    ɾTSDDNEDPNQJMFJOUFSOBMTTB ɾTSDDNEDPNQJMFJOUFSOBMTTBHFO ɾTSDDNEJOUFSOBMPCK தؒදݱ *3 ࡞੒ ɾߏจղੳ ɾܕνΣοΫ ɾதؒදݱ *3 ม׵ ϛουΤϯυ࠷దԽ ɾσουίʔυ࡟আ ɾΠϯϥΠϯԽ ɾԾ૝Խղআ ɾΤεέʔϓղੳ 44"ܗࣜม׵ ɾ੩త୯Ұ୅ೖܗࣜʹม׵ ػցޠม׵ ɾ֤؀ڥͷϚγϯޠʹม׵ ຊ౰͸XBMLͳͲଞ΋৭ʑ΍ͬͯΔ͚Ͳলུ 
  3. $PNQJMFSͷ͓࢓ࣄ(PͰ͸͜͜ʹΞοϓσʔτ͕ೖͬͨ🙆 TSDDNEDPNQJMFJOUFSOBMHDNBJOHP MPPQWBS'PS$BQUVSF͕*3ϊʔυΛॻ͖׵͍͑ͯͦ͏ʂ ͜͜ΛಡΊ͹উͪ΍ʂ ϑϥά MPPQWBSύοέʔδͷ಺෦࣮૷ΛಡΉ தؒදݱ *3 ࡞੒ ɾࣈ۟ղੳ

    ɾܕνΣοΫ ɾ*3 தؒදݱ ม׵ ϛουΤϯυ࠷దԽ ɾσουίʔυ࡟আ ɾΠϯϥΠϯԽ ɾԾ૝Խղআ ɾϧʔϓม਺ͷ҉໧తͳ࠶ఆٛ ɾΤεέʔϓղੳ 44"ม׵ ɾ੩త୯Ұ୅ೖܗࣜʹม׵ ػցޠม׵ ɾ֤؀ڥͷϚγϯޠʹม׵ 
  4. MPPQWBSύοέʔδͷ಺෦࣮૷ΛಡΉ·ͱΊ MPPQWBSύοέʔδͷ಺෦࣮૷ΛಡΉ MPPQWBSύοέʔδʹ͍ͭͯ ɾ(P͔Βϧʔϓม਺ͷ҉໧తͳ࠶એݴ͕ߦΘΕΔΑ͏ʹͳͬͨ ɾϧʔϓม਺҉໧తͳ࠶એݴͷ৚݅͸ΞυϨεऔಘPSΫϩʔδϟΩϟϓνϟ͞Εͨ࣌Ͱ͋Δ ɾϛουΤϯυ࠷దԽͷMPPQWBSύοέʔδ͕ɺதؒදݱ *3 ϊʔυΛॻ͖׵͑Δ͜ͱͰͦΕΛ࣮ݱ͍ͯ͠Δ ࣍ճ༧ࠂ ɾ҉໧తͳϧʔϓม਺ͷ࠶એݴ͕ߦΘΕ͍ͯΔʹ΋͔͔ΘΒͣ

    ɹ֤ΠςϨʔγϣϯʹ͓͚Δϧʔϓม਺ͷΞυϨε͕ಉ͜͡ͱ΋͋Ε͹ҟͳΔ͜ͱ΋͋Δ QSJOUMOGNU1SJOUMO  ɾϧʔϓͷڍಈͷҧ͍͸Τεέʔϓղੳʹݤ͕͋Γͦ͏ l҉໧తͳ࠶ఆٛzͷΠϝʔδ CFGPSF GPSWSBOHF\ GNU1SJOUMO W  ^ BGUFS GPSWSBOHF\ @WW GNU1SJOUMO @W  ^ 
  5. ώʔϓͱελοΫͱ͸ ώʔϓͱελοΫɺΤεέʔϓղੳ IUUQTTQFBLFSEFDLDPNZNPUPOHQPPNFNPSZNBOBHFNFOUJOHP ελοΫ ɾ֤HPSPVUJOF͕؅ཧ͢ΔϝϞϦྖҬ αΠζ͕ಈతʹ৳ॖ  ɾϨΩγΧϧείʔϓ಺ͷ ϥΠϑαΠΫϧΛ੩తʹ༧ଌͰ͖Δ σʔλΛѻ͏

    ϩʔΧϧม਺ͳͲ  ɾ-*'0ͰׂΓ౰ͯͱղ์͕ߴ଎ ώʔϓ ɾओʹϨΩγΧϧείʔϓ֎ͷ ϥΠϑαΠΫϧΛ༧ଌͰ͖ͳ͍ σʔλΛѻ͏ άϩʔόϧม਺ͳͲ  ɾׂΓ౰ͯͱղ์͕஗͍ɻ($ʹ૟আΛ೚ͤΔඞཁ͕͋Δɻ ͳΔ΂͘ελοΫΛ࢖༻͢Δ ώʔϓʹୀආ͞Εͳ͍ Α͏ʹ͍ͨ͠ 
  6.  ΞηϯϒϦΛݟͯΈΔɹTUFQελοΫϙΠϯλ 41 ΛόΠτݮΒ͢ ελοΫϙΠϯλ 41 Εͨ͢͡ ͨͬ͘͢ ॳظελοΫϙΠϯλ 41

    ελοΫϙΠϯλ 41 ͱ͸ ɾલఏελοΫྖҬ͸ΞυϨεͷߴ͍Ґஔ͔Β࢖༻͞ΕΔ ɾͲ͜ͷΞυϨε·ͰελοΫ͕٧·͍ͬͯΔ͔Λࣔ͢ τοϓΞυϨεϙΠϯλ ώʔϓͱελοΫɺΤεέʔϓղੳ 
  7. ·ͱΊ MPPQWBSύοέʔδʹ͍ͭͯ ɾ(P͔Βϧʔϓม਺ͷ҉໧తͳ࠶એݴ *3ϊʔυվม ͕ߦΘΕΔΑ͏ʹͳͬͨ ɾ҉໧తͳ࠶એݴͷ৚݅͸ɺϧʔϓม਺͕ΞυϨεऔಘPSΫϩʔδϟΩϟϓνϟ͞Ε͍ͯΔ࣌ Τεέʔϓͱϧʔϓ ɾϧʔϓ಺Ͱએݴ͞Εͨม਺͕ελοΫׂΓ౰ͯͷ৔߹ ɹ֤ΠςϨʔγϣϯͰಉ͡ΞυϨεΛ࣋ͪɺελοΫྖҬ͕࠶ར༻͞ΕΔ ɾϧʔϓ಺Ͱએݴ͞Εͨม਺͕ώʔϓׂΓ౰ͯͷ৔߹

    ɹ֤ΠςϨʔγϣϯͰҟͳΔΞυϨεΛ࣋ͪɺ($ʹΑΔղ์·ͰώʔϓྖҬΛ઎༗͢Δ ɾGNU1SJOUܥؔ਺ͷҾ਺͸Τεέʔϓ͢ΔҰํɺϏϧτΠϯͷQSJOUܥؔ਺͸Τεέʔϓ͠ͳ͍ ɹΑͬͯϧʔϓม਺ͷΞυϨεग़ྗͷ݁Ռʹҧ͍͕ੜ͡Δ पลπʔϧʹ͍ͭͯ ɾηϚϯςΟΫεมߋʹରԠ͢ΔͨΊʹHDGMBHT΍CJTFDUͳͲଟ͘ͷपลπʔϧͷαϙʔτ͕͋Δ ɾLBSBNBSVBMQIBDPQZMPPQWBSͷΑ͏ʹ ɹݴޠͷΞοϓσʔτۦಈͰMJOUFSΛ࡞੒͢Δͷ͸044ॳ৺ऀʹ΋νϟϯε͕໌֬Ͱ͓͢͢Ί