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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
330
Find and Replace Code based on AST
flyerhzm
0
450
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
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
270
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.3k
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
120
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
15
8.8k
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
520
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
110
オブザーバビリティ駆動開発って実際どうなの?
yohfee
3
850
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
380
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
150
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
240
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
220
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
500
Featured
See All Featured
Believing is Seeing
oripsolob
1
84
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
310
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
200
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
76
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Marketing to machines
jonoalderson
1
5k
Design in an AI World
tapps
0
170
Six Lessons from altMBA
skipperchong
29
4.2k
Technical Leadership for Architectural Decision Making
baasie
3
290
The SEO Collaboration Effect
kristinabergwall1
0
390
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
110
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