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
基于AST的代码优化
Search
flyerhzm
October 10, 2015
Programming
10
800
基于AST的代码优化
flyerhzm
October 10, 2015
Tweet
Share
More Decks by flyerhzm
See All by flyerhzm
玩转 AST
flyerhzm
0
160
Find and Replace Code based on AST
flyerhzm
0
240
Rails Performance Tips
flyerhzm
0
1.2k
Refactor ruby code based on AST
flyerhzm
4
3.6k
Write ruby code to change ruby code
flyerhzm
5
3.5k
Building Asynchronous APIs
flyerhzm
25
8.9k
构建异步API服务
flyerhzm
19
7.2k
JRuby @ OpenFeint
flyerhzm
23
3.1k
Other Decks in Programming
See All in Programming
Package Traits
ikesyo
1
200
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
1.3k
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
530
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
930
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
QA環境で誰でも自由自在に現在時刻を操って検証できるようにした話
kalibora
1
140
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
390
技術的負債と向き合うカイゼン活動を1年続けて分かった "持続可能" なプロダクト開発
yuichiro_serita
0
300
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
10
4.9k
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
26
5.9k
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
440
為你自己學 Python
eddie
0
510
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
The Cult of Friendly URLs
andyhume
78
6.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
200
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Practical Orchestrator
shlominoach
186
10k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
What's in a price? How to price your products and services
michaelherold
244
12k
Fireside Chat
paigeccino
34
3.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Transcript
基于 AST 的代码优化 ⻩黄志敏
⾃自我介绍 • Xinmin Labs 创始⼈人 • 前 OpenFeint 资深⼯工程师 •
开源社区贡献者 • 半⻢马完赛者 • @flyerhzm
遇到的问题
代码审查
None
None
重复重复重复
None
None
解决⽅方案
CodeClimate
None
None
PullReview
None
如何做到的
开源⼯工具!
flay 分析代码结构相似度
None
flog 分析代码复杂度
None
reek 检查代码类、模块和⽅方法,报告Code Smell
None
roodi 分析并报告代码设计问题
None
rails_best_practices 针对 rails 项⺫⽬目代码检查 code smell
None
如何实现的呢
ruby 代码解析库 => AST
ParseTree • 最早的 ruby 代码解析库 • 不⽀支持 ruby 1.9 和后续版本
ruby_parser • 最流⾏行的 ruby 代码解析库 • 输出结果和 ParseTree ⼀一致
None
None
ActiveRecord::Base belongs_to :user touch :archived_at def archive
ripper • ruby 内置的解析库 • ⽀支持 ruby 的新语法
None
ActiveRecord::Base belongs_to :user def archive touch :archived_at
parser • 新的 ruby 代码解析库 • ⽀支持代码重写
None
ActiveRecord::Base belongs_to :user def archive touch :archived_at
满⾜足需求?
⾃自动修改!
transpec ⾃自动将 rspec 2 的语法转换成 rspec 3 的语法
None
None
None
rubocop 基于社区版的 ruby style guide 的代码分析和重写⼯工具
None
None
None
None
Synvert ruby 语法转换⼯工具
None
None
None
演⽰示
内部项⺫⽬目
None
None
奖励 • seeing_is_believing • method_log
参考资料 CodeClimate - https://codeclimate.com/ PullReview - https://www.pullreview.com/ flay - https://github.com/seattlerb/flay
flog - https://github.com/seattlerb/flog reek - https://github.com/troessner/reek roodi - https://github.com/roodi/roodi rails_best_practices - https://github.com/railsbp/rails_best_practices
参考资料 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
招聘 fl
[email protected]
谢谢 提问