Upgrade to Pro — share decks privately, control downloads, hide ads and more …

基于AST的代码优化

flyerhzm
October 10, 2015

 基于AST的代码优化

flyerhzm

October 10, 2015
Tweet

More Decks by flyerhzm

Other Decks in Programming

Transcript

  1. 基于 AST 的代码优化
    ⻩黄志敏

    View Slide

  2. ⾃自我介绍
    • Xinmin Labs 创始⼈人
    • 前 OpenFeint 资深⼯工程师
    • 开源社区贡献者
    • 半⻢马完赛者
    • @flyerhzm

    View Slide

  3. 遇到的问题

    View Slide

  4. 代码审查

    View Slide

  5. View Slide

  6. View Slide

  7. 重复重复重复

    View Slide

  8. View Slide

  9. View Slide

  10. 解决⽅方案

    View Slide

  11. CodeClimate

    View Slide

  12. View Slide

  13. View Slide

  14. PullReview

    View Slide

  15. View Slide

  16. 如何做到的

    View Slide

  17. 开源⼯工具!

    View Slide

  18. flay
    分析代码结构相似度

    View Slide

  19. View Slide

  20. flog
    分析代码复杂度

    View Slide

  21. View Slide

  22. reek
    检查代码类、模块和⽅方法,报告Code Smell

    View Slide

  23. View Slide

  24. roodi
    分析并报告代码设计问题

    View Slide

  25. View Slide

  26. rails_best_practices
    针对 rails 项⺫⽬目代码检查 code smell

    View Slide

  27. View Slide

  28. 如何实现的呢

    View Slide

  29. ruby 代码解析库
    =>
    AST

    View Slide

  30. ParseTree
    • 最早的 ruby 代码解析库
    • 不⽀支持 ruby 1.9 和后续版本

    View Slide

  31. ruby_parser
    • 最流⾏行的 ruby 代码解析库
    • 输出结果和 ParseTree ⼀一致

    View Slide

  32. View Slide

  33. View Slide

  34. ActiveRecord::Base
    belongs_to :user
    touch :archived_at
    def archive

    View Slide

  35. ripper
    • ruby 内置的解析库
    • ⽀支持 ruby 的新语法

    View Slide

  36. View Slide

  37. ActiveRecord::Base
    belongs_to :user
    def archive
    touch :archived_at

    View Slide

  38. parser
    • 新的 ruby 代码解析库
    • ⽀支持代码重写

    View Slide

  39. View Slide

  40. ActiveRecord::Base
    belongs_to :user
    def archive
    touch :archived_at

    View Slide

  41. 满⾜足需求?

    View Slide

  42. ⾃自动修改!

    View Slide

  43. transpec
    ⾃自动将 rspec 2 的语法转换成 rspec 3 的语法

    View Slide

  44. View Slide

  45. View Slide

  46. View Slide

  47. rubocop
    基于社区版的 ruby style guide 的代码分析和重写⼯工具

    View Slide

  48. View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. Synvert
    ruby 语法转换⼯工具

    View Slide

  53. View Slide

  54. View Slide

  55. View Slide

  56. 演⽰示

    View Slide

  57. 内部项⺫⽬目

    View Slide

  58. View Slide

  59. View Slide

  60. 奖励
    • seeing_is_believing
    • method_log

    View Slide

  61. 参考资料
    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

    View Slide

  62. 参考资料
    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

    View Slide

  63. View Slide

  64. 谢谢
    提问

    View Slide