Contenu connexe Similaire à Рефакторинг Ruby-кода / Анатолий Макаревич (Evrone) Similaire à Рефакторинг Ruby-кода / Анатолий Макаревич (Evrone) (20) Рефакторинг Ruby-кода / Анатолий Макаревич (Evrone)4. In next 15 minutes we will
• spice up our knowledge about refactoring
• look at some common smells
• get acquainted with automated code analysis
• become ready to refactor
14. Find code smells
Check test
coverage
Write tests
if needed
Change code
Ensure that
tests pass
Check overall
complexity
15. Check test coverage
Check test
coverage
Write tests
if needed
Change code
Ensure that
tests pass
Check overall
complexity
16. Write new tests if needed
Check test
coverage
Write tests
if needed
Change code
Ensure that
tests pass
Check overall
complexity
18. Ensure that tests pass
Check test
coverage
Write tests
if needed
Change code
Ensure that
tests pass
Check overall
complexity
23. s(:class, :Sexp,
s(:const, :Array),
s(:defn, :sexp_type, s(:args), s(:call, nil, :first)),
s(:defn, :sexp_body, s(:args), s(:call, nil, :[], s(:lit, 1..-1))))
S-expressions
24. s(:class, :Sexp,
s(:const, :Array),
s(:defn, :sexp_type, s(:args), s(:call, nil, :first)),
s(:defn, :sexp_body, s(:args), s(:call, nil, :[], s(:lit, 1..-1))))
Sexp operator
25. s(:class, :Sexp,
s(:const, :Array),
s(:defn, :sexp_type, s(:args), s(:call, nil, :first)),
s(:defn, :sexp_body, s(:args), s(:call, nil, :[], s(:lit, 1..-1))))
Sexp body
27. Long method
s(:class, :Sexp,
s(:const, :Array),
s(:defn, :sexp_type, s(:args), s(:call, nil, :first)),
s(:defn, :sexp_body, s(:args), s(:call, nil, :[], s(:lit, 1..-1))))
Find method Sexp :defn
28. Long method
s(:class, :Sexp,
s(:const, :Array),
s(:defn, :sexp_type, s(:args), s(:call, nil, :first)),
s(:defn, :sexp_body, s(:args), s(:call, nil, :[], s(:lit, 1..-1))))
Find method Sexp :defn
Count sexp operators
29. Complex class
s(:class, :Sexp,
s(:const, :Array),
s(:defn, :sexp_type, s(:args), s(:call, nil, :first)),
s(:defn, :sexp_body, s(:args), s(:call, nil, :[], s(:lit, 1..-1))))
Find method Sexp :class
30. Complex class
s(:class, :Sexp,
s(:const, :Array),
s(:defn, :sexp_type, s(:args), s(:call, nil, :first)),
s(:defn, :sexp_body, s(:args), s(:call, nil, :[], s(:lit, 1..-1))))
Find method Sexp :class
Cound weights of Sexp operators
31. Stupid variable name
s(:class, :HomerSimpson,
s(:const, :BlahBlahBlah),
s(:defn, :donuts, s(:args), s(:call, nil, :fist)),
s(:defn, :beersnstuff, s(:args), s(:call, nil, :[], s(:lit, 1..-1))))
34. It is about perception
We READ code, NOT COMPILE it.
35. After this talk do:
• gem install flog
• gem install flay
• gem install reek
• flog PROJECT_PATH
• flay PROJECT_PATH
• reek PROJECT_PATH