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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
flyerhzm
October 18, 2015
Programming
4.3k
4
Share
Refactor ruby code based on AST
flyerhzm
October 18, 2015
More Decks by flyerhzm
See All by flyerhzm
玩转 AST
flyerhzm
0
350
Find and Replace Code based on AST
flyerhzm
0
470
Rails Performance Tips
flyerhzm
0
1.4k
基于AST的代码优化
flyerhzm
10
900
Write ruby code to change ruby code
flyerhzm
5
3.8k
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
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.2k
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
580
安いハードウェアでVulkan
fadis
1
870
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
1.4k
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
140
モダンOBSプラグイン開発
umireon
0
190
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.5k
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
180
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
210
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
540
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
110
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
130
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Context Engineering - Making Every Token Count
addyosmani
9
790
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Everyday Curiosity
cassininazir
0
180
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
sira's awesome portfolio website redesign presentation
elsirapls
0
200
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Un-Boring Meetings
codingconduct
0
250
Color Theory Basics | Prateek | Gurzu
gurzu
0
270
Crafting Experiences
bethany
1
100
Rails Girls Zürich Keynote
gr2m
96
14k
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