Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Refactor ruby code based on AST
Search
flyerhzm
October 18, 2015
Programming
4
4.2k
Refactor ruby code based on AST
flyerhzm
October 18, 2015
Tweet
Share
More Decks by flyerhzm
See All by flyerhzm
玩转 AST
flyerhzm
0
320
Find and Replace Code based on AST
flyerhzm
0
430
Rails Performance Tips
flyerhzm
0
1.3k
基于AST的代码优化
flyerhzm
10
890
Write ruby code to change ruby code
flyerhzm
5
3.7k
Building Asynchronous APIs
flyerhzm
25
9.1k
构建异步API服务
flyerhzm
19
7.4k
JRuby @ OpenFeint
flyerhzm
23
3.4k
Other Decks in Programming
See All in Programming
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.8k
CSC307 Lecture 06
javiergs
PRO
0
690
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
350
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
1k
アプリプラットフォームにおける、レガシー基盤刷新の戦略
masaki12
0
110
あなたはユーザーではない #PdENight
kajitack
3
110
CSC307 Lecture 11
javiergs
PRO
0
570
AIプロダクト時代のQAエンジニアに求められること
imtnd
1
280
dchart: charts from deck markup
ajstarks
3
1k
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
300
Raku Raku Notion 20260128
hareyakayuruyaka
0
400
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
800
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
600
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
Google's AI Overviews - The New Search
badams
0
920
Typedesign – Prime Four
hannesfritz
42
3k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
120
4 Signs Your Business is Dying
shpigford
187
22k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
110
Design in an AI World
tapps
0
150
Transcript
Refactor ruby code based on AST Richard Huang @flyerhzm
None
None
Problem
Code Review
None
None
Repeat, Repeat, Repeat
None
None
Any solution?
CodeClimate
None
None
PullReview
How they work?
CodeClimate / PullReview flay flog brakeman rails_best_practices … Open Source
Gems
flay analyzes code for structural similarities
None
flog reports the most tortured code
None
brakeman a static analysis security vulnerability scanner for rails applications
None
rails_best_practices checks the quality of rails code
None
How they work?
flay flog brakeman rails_best_practices … ruby_parser ripper parser ruby parser
=> AST CodeClimate / PullReview
ParseTree • First ruby parser • Not support ruby 1.9
or newer
ruby_parser • Most popular ruby parser • Output is 100%
equivalent to ParseTree
None
None
ActiveRecord::Base belongs_to :user touch :archived_at def archive
ripper • Ruby built-in parser • Support ruby
None
ActiveRecord::Base belongs_to :user def archive touch :archived_at
parser • A new ruby parser • Support rewriting
None
ActiveRecord::Base belongs_to :user def archive touch :archived_at
Good enough?
Auto rewrite!
transpec the rspec syntax converter
None
None
None
None
rubocop static code analyzer based on the community ruby style
guide
None
None
transpec rubocop parser
None
Generic Solution
Synvert converts ruby code to better syntax
DSL • within_file / within_files • with_node / within_node •
if_exist_node / unless_exist_node • append / insert / insert_after / replace_with / remove • ……
None
None
None
Demo Convert rspec to new syntax Convert rails code from
2.3 to 3.0 Convert rails code from 3.2 to 4.0
Side Project not published yet
None
None
Refs CodeClimate - https://codeclimate.com/ PullReview - https://www.pullreview.com/ flay - https://github.com/seattlerb/flay
flog - https://github.com/seattlerb/flog brakeman - https://github.com/presidentbeef/brakeman rails_best_practices - https://github.com/railsbp/ rails_best_practices
Refs parsetree - https://github.com/seattlerb/parsetree ruby_parser - https://github.com/seattlerb/ruby_parser parser - https://github.com/whitequark/parser
rubocop - https://github.com/bbatsov/rubocop transpec - https://github.com/yujinakayama/transpec synvert - https://github.com/xinminlabs/synvert
Thank You