refactoring erlang with wrangler - university of kent · 2010-11-15 · refactoring erlang with...
TRANSCRIPT
![Page 1: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/1.jpg)
Refactoring Erlang with Wrangler"
Huiqing Li"Simon Thompson "
"
School of Computing"University of Kent "
![Page 2: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/2.jpg)
Overview"
Refactoring."Tools and tool building."Clone detection."Improve module structure."Tool demo … "
![Page 3: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/3.jpg)
Introduction"
![Page 4: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/4.jpg)
All in the code"
Functional programs embody their design in their code.""Successful programs evolve … as do their tests, makefiles etc."
loop(Frequencies) ->
receive
{request, Pid, allocate} ->
{NewFrequencies, Reply} = allocate(Frequencies, Pid),
reply(Pid, Reply),
loop(NewFrequencies);
{request, Pid , {deallocate, Freq}} ->
NewFrequencies=deallocate(Frequencies, Freq),
reply(Pid, ok),
loop(NewFrequencies);
{'EXIT', Pid, _Reason} ->
NewFrequencies = exited(Frequencies, Pid),
loop(NewFrequencies);
{request, Pid, stop} ->
reply(Pid, ok)
end.
exited({Free, Allocated}, Pid) ->
case lists:keysearch(Pid,2,Allocated) of
{value,{Freq,Pid}} ->
NewAllocated = lists:keydelete(Freq,1,Allocated),
{[Freq|Free],NewAllocated};
false ->
{Free,Allocated}
end.
![Page 5: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/5.jpg)
Soft-Ware"Thereʼs no single correct design … ""
… different options for different situations.""
Maintain flexibility as the system evolves.""
Refactor as you program."
![Page 6: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/6.jpg)
Refactoring"
Refactoring means changing the design or structure of a program … without changing its behaviour."
Refactor"Modify"
![Page 7: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/7.jpg)
Generalisation"-module (test).!-export([f/1]).! !add_one ([H|T]) ->! [H+1 | add_one(T)]; !!add_one ([]) -> []. !!
f(X) -> add_one(X).""
-module (test).!-export([f/1]).! !add_one (N, [H|T]) ->! [H+N | add_one(N,T)];!!add_one (N,[]) -> []. !!f(X) -> add_one(1, X).!
!
-module (test).!-export([f/1]).! !add_int (N, [H|T]) ->! [H+N | add_int(N,T)];!!add_int (N,[]) -> []. !!f(X) -> add_int(1, X). !
Generalisation and renaming"
![Page 8: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/8.jpg)
Generalisation"-export([printList/1]).!!printList([H|T]) ->! io:format("~p\n",[H]),! printList(T);!printList([]) -> true.!
"printList([1,2,3])""
-export([printList/2]).!!printList(F,[H|T]) ->! F(H),! printList(F, T);!printList(F,[]) -> true.!
"printList(! fun(H) ->! io:format("~p\n", [H]) ! end, ! [1,2,3]).! !
![Page 9: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/9.jpg)
The tool"
![Page 10: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/10.jpg)
Refactoring tool support"Bureaucratic and diffuse.""
Tedious and error prone.""
Semantics: scopes, types, modules, …""
Undo/redo""
Enhanced creativity"
![Page 11: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/11.jpg)
Wrangler"Refactoring tool for Erlang""
Integrated into Emacs and Eclipse""
Multiple modules""
Structural, process, macro refactorings"
Duplicate code detection … "… and elimination""
Testing / refactoring""
"Similar" code identification"Code Inspection"
Property discovery"
![Page 12: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/12.jpg)
Wrangler"
Basic refactorings: structural, macro, process and test-framework related"
Clone detection + removal"
Improve module structure"
![Page 13: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/13.jpg)
Design philosophy"
Automate the simple actions …""
…as by hand they are tedious and error-prone.""
Decision support for more complex tasks …""
… don’t try to make them “push button”.""
Clone detection experience validates this."
![Page 14: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/14.jpg)
Architecture of Wrangler"
![Page 15: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/15.jpg)
Semantic analysis"
Binding structure"• Dynamic atom creation, multiple binding occurrences, pattern semantics etc.""
Module structure and projects"• No explicit projects for Erlang; cf Erlide / Emacs.""
Type and effect information"• Need effect information for e.g. generalisation."
![Page 16: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/16.jpg)
Erlang refactoring: challenges "Multiple binding occurrences of variables."Indirect function call or function spawn: "
"apply (lists, rev, [[a,b,c]]) "Multiple arities … multiple functions: rev/1""
Concurrency"Refactoring within a design library: OTP."Side-effects."
![Page 17: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/17.jpg)
Static vs dynamic"
Aim to check conditions statically.""
Static analysis tools possible … but some aspects intractable: e.g. dynamically manufactured atoms.""
Conservative vs liberal.""
Compensation?"
![Page 18: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/18.jpg)
![Page 19: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/19.jpg)
![Page 20: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/20.jpg)
Refactorings in Wrangler"• Renaming variable, function, module, process • Introduce/inline variables • Function generalisation • Move function(s) between modules. • Function extraction • Fold against definition • Introduce and fold against macros.
• Tuple function arguments • Register a process • From function to process • Add a tag to messages • Quickcheck-related refactorings. All these refactorings work across multiple-module projects and respect macro definitions."
![Page 21: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/21.jpg)
Integration with ErlIDE"Tighter control of what's a project.""Potential for adoption by newcomers to the Erlang community."
![Page 22: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/22.jpg)
Tool Demo"
![Page 23: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/23.jpg)
Clone detection"
![Page 24: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/24.jpg)
Duplicate code considered harmful"
It’s a bad smell …""
• increases chance of bug propagation,"• increases size of the code,"• increases compile time, and,"• increases the cost of maintenance. ""
But … itʼs not always a problem."
![Page 25: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/25.jpg)
X+4! Y+5!X+4! Y+5!
What is ‘identical’ code?"
variable+number!
Identical if values of literals and variables ignored, but respecting binding structure."
![Page 26: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/26.jpg)
(X+3)+4! 4+(5-(3*X))!(X+3)+4! 4+(5-(3*X))!
What is ‘similar’ code?"
X+Y!
The anti-unification gives the (most specific) common generalisation. "
![Page 27: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/27.jpg)
Clone detection"
• The Wrangler clone detector "– relatively efficient"– no false positives"
• User-guided interactive removal of clones."• Integrated into development environments, but can also be run from an Erlang shell."
![Page 28: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/28.jpg)
Detection Expression search"All instances of
expressions similar to this expression …"
"
… and their common generalisation."
"
Default threshold: similarity ≥ 0.8."
"
All clones in a project meeting the threshold parameters …""
… and their common generalisation." "
Default threshold: ≥ 5 expressions and similarity of ≥ 0.8."
![Page 29: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/29.jpg)
Similarity"
Threshold: anti-unifier should be big enough relative to the class members:""
"
similarity = min( , )"""
Can also threshold length of expression sequence, or number of tokens, or … ."
||(X+3)+4||" ||4+(5-(3*X))||"||X+Y||" ||X+Y||"
![Page 30: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/30.jpg)
Clone detection"
![Page 31: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/31.jpg)
Clone detection"
![Page 32: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/32.jpg)
Tool Demo"
![Page 33: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/33.jpg)
Improve Module Structure"
![Page 34: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/34.jpg)
Maintaining modularity"
Cyclic module dependencies."
"
Export of functions that are “really” internal."
"
Modules with multiple purposes."
"
Very large modules."
Modularity tends to deteriorate over time."
"
Repair with incremental modularity maintenance."
"
Four modularity “bad smells”."
![Page 35: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/35.jpg)
Refactoring: move functions"
Move a group of functions from !one module to another.!
!
Which functions to move? Move to where? How?"Wrangler provides: "1. " Modularity smell detection "2. " Refactoring suggestions "3. " Refactoring"
![Page 36: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/36.jpg)
“Dogfooding” Wrangler""
Case study of Wrangler-0.8.7""
56 Erlang modules, 40 kloc (inc. comments).""
• Improper dependencies: sharing implementation between refactorings."
• Cyclic dependencies: need to split modules."
• Multiple goals: refac_syntax_lib 7 clusters."
![Page 37: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/37.jpg)
Wrangler module graph"
![Page 38: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/38.jpg)
Wrangler Cycles"
• Nodes in red are modules that need inspection."
![Page 39: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/39.jpg)
Inter-layer cyclic module dependency found: [refac_prettypr, refac_util, refac_prettypr] Refactoring suggestion: move_fun(refac_util, [{refac_util,write_refactored_files,1}, {refac_util,write_refactored_files,3}, {refac_util,write_refactored_files,4}], user_supplied_target_mod).
refac_util
Inter-layer dependency"refac_prettypr
concat_toks/1 get_toks/1 get_range/1
print_ast/2
![Page 40: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/40.jpg)
refac_util
Intra-layer dependency"
refac_type_annotation full_buTP/3 parse_annotate_file/3 rewrite/2 stop_tdTP/3 test_framework_used/1
type_ann_ast/2
![Page 41: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/41.jpg)
Identifying "API" functions"
• Identify by examining call graph."• API functions are those …"
• … not used internally,"• … "close to" other API functions."
• Others are seen as internal, external calls to these are deemed improper."
![Page 42: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/42.jpg)
refac_register_pid
Improper dependency"
refac_add_a_tag refac_rename_process refac_annotate_pid
spawn_funs/0 is_spawn_app/0 evaluate_expr/5
![Page 43: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/43.jpg)
refac_syntax_lib.erl"
Report on multi-goal modules: 12/56.""
Agglomerative hierarchical algorithm.""
Functions represented by feature lists … fed into Jaccard metric. "
Module: refac_syntax_lib Cluster 1, Indegree:25, OutDegree:1, [{map,2}, {map_subtrees,2}, {mapfold,3},{mapfold_subtrees,3}, {fold,3}, {fold_subtrees,3}] Cluster 2, Indegree:0, OutDegree:0, [{foldl_listlist,3},{mapfoldl_listlist,3}] Cluster 3, Indegree:0, OutDegree:0, [{new_variable_name,1},{new_variable_names,2}, {new_variable_name,2},{new_variable_names,3}] Cluster 4, Indegree:4, OutDegree:1, [{annotate_bindings,2},{annotate_bindings,3}, {var_annotate_clause,4},{vann_clause,4}, {annotate_bindings,1}] …
![Page 44: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/44.jpg)
Future work"
Incremental detection of module bad smells, e.g. in overnight builds.""
Partition module exports according to client modules.""
Case studies.""
![Page 45: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/45.jpg)
Improve module structure"
• Refactoring "– Move function(s) from one module to another."
– select a function definition to move a single function, an export list to move a collect of functions."
– Partition module exports.""
![Page 46: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/46.jpg)
![Page 47: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/47.jpg)
![Page 48: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/48.jpg)
![Page 49: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/49.jpg)
Tool Demo"
![Page 50: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/50.jpg)
Hands-on"
![Page 51: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/51.jpg)
Installation: Mac OS X and Linux""Requires: Erlang release R11B-5 or later ""
51
![Page 52: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/52.jpg)
Installation: Mac OS X and Linux"Download Wrangler from "
http://www.cs.kent.ac.uk/projects/wrangler/""
or get it from the memory stick …""
In the wrangler directory""
./configure""
make""
sudo make install
52
![Page 53: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/53.jpg)
Installation: Mac OS X and Linux"Add to ~/.emacs file:"(add-to-list 'load-path "/usr/local/share/wrangler/elisp") (require 'wrangler)
If youʼre installing emacs now, then you add the following lines to your ~/.emacs file"
(setq load-path (cons "/usr/local/otp/lib/tools-<ToolsVer>/emacs"
load-path))
(setq erlang-root-dir "/usr/local/otp")
(setq exec-path (cons "/usr/local/otp/bin" exec-path))
(require 'erlang-start)
53
![Page 54: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/54.jpg)
Installation: Windows"Requires R11B-5 or later + Emacs ""
Download installer from "http://www.cs.kent.ac.uk/projects/wrangler/ "
"
Requires no other actions. "
54
![Page 55: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/55.jpg)
Installation: Eclipse + ErlIDE"Requires Erlang R11B-5 or later, if it isn't already present on your system. ""
On Windows systems, use a path with no spaces in it.""
Install Eclipse 3.5, if you didn't already. ""
All the details at "http://erlide.sourceforge.net/"
"
55
![Page 56: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/56.jpg)
Starting Wrangler in Emacs"
Open emacs, and open a .erl file."M-x erlang-refactor-on or ..."... C-c, C-r"New menus: Refactor and Inspector"Customise for dir"Undo C-c, C-w, _
56
![Page 57: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/57.jpg)
Preview Feature"
Preview changes before confirming the change"
Emacs ediff is used. ""
57
![Page 58: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/58.jpg)
Stopping Wrangler in Emacs"
M-x erlang-refactor-off to stop Wrangler""
Shortcut C-c, C-r""
58
![Page 59: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/59.jpg)
Tutorial materials"Exercises:"http://www.cs.kent.ac.uk/projects/
wrangler/Misc/WranglerExercise.{doc.pdf}"
Code:"http://www.cs.kent.ac.uk/projects/
wrangler/Misc/wrangler_ex.tar.gz""
59
![Page 60: Refactoring Erlang with Wrangler - University of Kent · 2010-11-15 · Refactoring Erlang with Wrangler" Huiqing Li" Simon Thompson "" School of Computing" University of Kent "Overview"](https://reader034.vdocuments.mx/reader034/viewer/2022042319/5f0818947e708231d42050b1/html5/thumbnails/60.jpg)
Carrying on … "
Try on your own project code …""Feedback:"[email protected] or"[email protected]"
60