基于AST的代码优化

13c60e2a5806406b537daa542d3495da?s=47 flyerhzm
October 10, 2015

 基于AST的代码优化

13c60e2a5806406b537daa542d3495da?s=128

flyerhzm

October 10, 2015
Tweet

Transcript

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

  2. ⾃自我介绍 • Xinmin Labs 创始⼈人 • 前 OpenFeint 资深⼯工程师 •

    开源社区贡献者 • 半⻢马完赛者 • @flyerhzm
  3. 遇到的问题

  4. 代码审查

  5. None
  6. None
  7. 重复重复重复

  8. None
  9. None
  10. 解决⽅方案

  11. CodeClimate

  12. None
  13. None
  14. PullReview

  15. None
  16. 如何做到的

  17. 开源⼯工具!

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

  19. None
  20. flog 分析代码复杂度

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

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

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

  27. None
  28. 如何实现的呢

  29. ruby 代码解析库 => AST

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

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

  32. None
  33. None
  34. ActiveRecord::Base belongs_to :user touch :archived_at def archive

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

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

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

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

  41. 满⾜足需求?

  42. ⾃自动修改!

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

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

  48. None
  49. None
  50. None
  51. None
  52. Synvert ruby 语法转换⼯工具

  53. None
  54. None
  55. None
  56. 演⽰示

  57. 内部项⺫⽬目

  58. None
  59. None
  60. 奖励 • seeing_is_believing • method_log

  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
  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
  63. 招聘 flyerhzm@xinminlabs.com

  64. 谢谢 提问