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
3.4k
Refactor ruby code based on AST
flyerhzm
October 18, 2015
Tweet
Share
More Decks by flyerhzm
See All by flyerhzm
玩转 AST
flyerhzm
0
130
Find and Replace Code based on AST
flyerhzm
0
200
Rails Performance Tips
flyerhzm
0
1.2k
基于AST的代码优化
flyerhzm
10
740
Write ruby code to change ruby code
flyerhzm
5
3.5k
Building Asynchronous APIs
flyerhzm
25
8.9k
构建异步API服务
flyerhzm
19
7.1k
JRuby @ OpenFeint
flyerhzm
23
3k
Other Decks in Programming
See All in Programming
サーバーレスで負荷試験!Step Functions + Lambdaを使ったk6の分散実行
shuntakahashi
6
1.6k
いつか使える ObjectSpace / Maybe useful ObjectSpace
euglena1215
2
140
Ebitengineの1vs1ゲーム WebRTCの活用
ponyo877
0
380
Kotlin 2.0 and Beyond
antonarhipov
2
150
Prolog入門
qnighy
4
1k
Scala アプリケーションのビルドを改善してデプロイ時間を 1/4 にした話 | How I improved the build of my Scala application and reduced deployment time by 4x
nomadblacky
1
180
私のEbitengineの第一歩
qt_luigi
0
450
Understand the mechanism! Let's do screenshots tests of Compose Previews with various variations / 仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう
sumio
3
810
GraphQLの魅力を引き出すAndroidクライアント実装
morux2
3
730
意外とフォントが大事だった話 / Font Issues on Internationalization
fumi23
0
110
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
550
o1モデルのプロンプトエンジニアリングって?
ktc_wada
0
270
Featured
See All Featured
Design by the Numbers
sachag
277
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.4k
RailsConf 2023
tenderlove
28
810
Dealing with People You Can't Stand - Big Design 2015
cassininazir
363
22k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
Six Lessons from altMBA
skipperchong
26
3.4k
Building an army of robots
kneath
302
42k
Documentation Writing (for coders)
carmenintech
65
4.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
38
9.2k
What's new in Ruby 2.0
geeforr
340
31k
Teambox: Starting and Learning
jrom
131
8.7k
How GitHub Uses GitHub to Build GitHub
holman
472
290k
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