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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
flyerhzm
October 10, 2015
Programming
10
890
基于AST的代码优化
flyerhzm
October 10, 2015
Tweet
Share
More Decks by flyerhzm
See All by flyerhzm
玩转 AST
flyerhzm
0
340
Find and Replace Code based on AST
flyerhzm
0
460
Rails Performance Tips
flyerhzm
0
1.4k
Refactor ruby code based on AST
flyerhzm
4
4.3k
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
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
100
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
260
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.4k
Understanding Apache Lucene - More than just full-text search
spinscale
0
140
ファインチューニングせずメインコンペを解く方法
pokutuna
0
200
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
160
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
240
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
420
ローカルで稼働するAI エージェントを超えて / beyond-local-ai-agents
gawa
0
150
The free-lunch guide to idea circularity
hollycummins
0
370
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
290
AI 開発合宿を通して得た学び
niftycorp
PRO
0
180
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
420
sira's awesome portfolio website redesign presentation
elsirapls
0
200
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
420
How to Think Like a Performance Engineer
csswizardry
28
2.5k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
Raft: Consensus for Rubyists
vanstee
141
7.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
400
KATA
mclloyd
PRO
35
15k
New Earth Scene 8
popppiees
1
1.8k
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]
谢谢 提问