From 87c3308de1202ab7b7ba366444bdd6eb1d172f0b Mon Sep 17 00:00:00 2001 From: Huiqing Li Date: Sun, 29 Oct 2023 11:19:37 +0000 Subject: [PATCH] Added new doc files. --- docs/_config.yml | 2 + docs/getting-started.md | 52 +++++++ docs/index.md | 60 ++++++++ docs/publications.md | 41 ++++++ docs/wls/1_highlight.png | Bin 0 -> 6242 bytes docs/wls/2_select.png | Bin 0 -> 24990 bytes docs/wls/3_input.png | Bin 0 -> 8257 bytes docs/wls/4_save.png | Bin 0 -> 10662 bytes docs/wls/5_form.png | Bin 0 -> 19113 bytes docs/wls/6_comment_out_spec.png | Bin 0 -> 5629 bytes docs/wls/wrangler_language_server.markdown | 163 +++++++++++++++++++++ docs/wrangler.png | Bin 0 -> 32415 bytes 12 files changed, 318 insertions(+) create mode 100644 docs/_config.yml create mode 100644 docs/getting-started.md create mode 100644 docs/index.md create mode 100644 docs/publications.md create mode 100644 docs/wls/1_highlight.png create mode 100644 docs/wls/2_select.png create mode 100644 docs/wls/3_input.png create mode 100644 docs/wls/4_save.png create mode 100644 docs/wls/5_form.png create mode 100644 docs/wls/6_comment_out_spec.png create mode 100644 docs/wls/wrangler_language_server.markdown create mode 100644 docs/wrangler.png diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 00000000..c5074ea9 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,2 @@ +name: "" +title: null diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 00000000..a8b6ea47 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,52 @@ +# Getting started + +## How do I get started with Wrangler? + +First you need to download and install Wrangler: details of this are on the [home page](index.html). All the details of getting Wrangler running are further down this page. + +The system is documented: this tells you about all the refactorings and other facilities. You can read it [here](https://refactoringtools.github.io/wrangler/). Installation instructions are further down this page. + +You can see some introductory presentations about using Wrangler here. +- [Improving your (test) code with Wrangler](http://www.cs.kent.ac.uk/people/staff/sjt/presentations/PerthFeb2010.ppt) +- [Hands-on Refactoring with Wrangler](http://www.cs.kent.ac.uk/people/staff/sjt/presentations/ErlangFactory09.ppt) + +Finally, you can take a look at the videos about Wrangler, available from the [home page](index.html). + + +## Installation + +### With Erlang-LS (VS Code, Sublime, IntelliJ and others) + +Follow the guide of the [Wrangler Language Server](wls/wrangler_language_server) + +### Mac OS X and Linux + +Follow the INSTALL file from the repository. + +### Windows + +[Download installer](https://github.com/downloads/RefactoringTools/wrangler/Wrangler_Setup.exe) + +(currently outdated) + +### Running Wrangler in Emacs + +Load a `.erl` file. + +Start/stop using + `Ctrl-C, Ctrl-R` + +To undo any refactoring type + `Ctrl-C, Ctrl-_` + +To configure the search directories, select the `Customize Wrangler` menu option. + +On Windows, Erlang release R14/above are required + +### Running Wrangler in Eclipse + ErlIDE + +On Windows systems, use a path with no spaces in it. + +Install Eclipse, if you didn't already. + +All the details [here](http://erlide.org/index.html). \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..e6aef985 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,60 @@ +# Wrangler + + + +Wrangler is an interactive refactoring tool for Erlang, integrated into Visual Studio Code and other LSP-compliant editors as the +[Wrangler language server](wls/wrangler_language_server), as well as emacs and Eclipse. + +The refactorings in Wrangler cover structural changes such as function, variable and module renaming, function extraction and generalisation. Wrangler recognises macros in code, and can be used on a single file or across a whole project. + +Wrangler can also be used to locate and remove code clones, and to improve the module structure of projects. Wrangler is extensible, with an API for writing new refactorings and a DSL for scripting complex refactoring combinations. + +Wrangler also supports testing in EUnit, QuickCheck and Common Test, so your tests are refactored automatically when you refactor your code. + +We have written a paper on [Refactoring tools for functional languages](https://www.cambridge.org/core/journals/journal-of-functional-programming/article/refactoring-tools-for-functional-languages/F78282D0AE831BD11AD5531826892139), which covers a lot of the background to the development of Wrangler and refactoring for Erlang. Our other publications about Wrangler are listed here. + +### Acknowledgements + +The development of Wrangler has been supported by UK Research and Innovation, the 7th Framework Programme of the European Union, and the Erlang Ecosystem Foundation. + +## Getting Started with Wrangler + +Wrangler for unix (Mac OS X and linux), which uses emacs as a front end, is available from [github](https://github.com/RefactoringTools/Wrangler). + +Wrangler [installer for windows](https://github.com/RefactoringTools/wrangler/releases/download/wrangler1.2/Wrangler_Setup.exe). + +Wrangler can be used within Eclipse alongside [Erlide](https://erlide.org/index.html), the Erlang plugin. + +Details about installing and getting started with Wrangler are [here](getting-started.html). + +## Documentation + +[Online Documentation](doc/index.html). + +## Videos + +- [Getting started with Wrangler](http://www.youtube.com/watch?v=TsiZR9I22VY) +- [Basic refactorings in Wrangler](http://www.youtube.com/watch?v=3GAN69shGLk) +- [Structural refactorings in Wrangler](http://www.youtube.com/watch?v=NURUuTQ9NoA) +- [Refactoring and Clone Detection in Wrangler](http://www.youtube.com/watch?v=RMYwv2daTVg) +- [InfoQ interview with Huiqing and Simon on refactoring](http://www.infoq.com/interviews/thompson-li-refactoring) +- [DIY Refactoring with Wrangler](http://www.cs.kent.ac.uk/people/staff/sjt/presentations/TutorialNov11.ppt): a presentation at the 2011 Erlang User Conference (EUC). +- [Let's make refactoring tools user-extensible!](http://www.cs.kent.ac.uk/people/staff/sjt/Release/FunInTheAfternoon.pdf) Fun in the Afternoon, Brighton, Nov 2012. +- Evolving your projects with Wrangler: EUC 2014, [slides](http://www.cs.kent.ac.uk/people/staff/sjt/presentations/EvolvingYourProjectsWithWrangler.pdf) [video](http://vimeo.com/100523695). +- [Evolving projects to concurrency with Wrangler](http://www.infoq.com/presentations/wrangler), Erlang Factory 2015. + +## Tutorial from EUC 2010 + +- Slides: [PPT](http://www.cs.kent.ac.uk/projects/wrangler/Misc/TutorialNov10.ppt) [PDF](http://www.cs.kent.ac.uk/projects/wrangler/Misc/TutorialNov10.pdf) +- Exercises: [DOC](http://www.cs.kent.ac.uk/projects/wrangler/Misc/WranglerExercise.doc) [PDF](http://www.cs.kent.ac.uk/projects/wrangler/Misc/WranglerExercise.pdf) +- Example code: [gzip](http://www.cs.kent.ac.uk/projects/wrangler/Misc/wrangler_ex.tar.gz) + +## Links + +- [Publications](publications.html) +- [The RELEASE project](http://www.release-project.eu/) +- [HaRe: the Haskell refactorer](https://github.com/RefactoringTools/HaRe) +- [Simon Thompson](http://www.cs.kent.ac.uk/people/staff/sjt/) + + + diff --git a/docs/publications.md b/docs/publications.md new file mode 100644 index 00000000..9e4c58dd --- /dev/null +++ b/docs/publications.md @@ -0,0 +1,41 @@ +# Publications + +Li, Huiqing and Thompson, Simon (2015) [Safe Concurrency Introduction through Slicing](https://kar.kent.ac.uk/46579/). In: Proceedings of the 2015 Workshop on Partial Evaluation and Program Manipulation - PEPM '15. ACM SIGPLAN pp. 103-113. + +Li, Huiqing and Thompson, Simon and Lamela Seijas, Pablo and Francisco, Miguel Angel (2014) [Automating property-based testing of evolving web service](https://kar.kent.ac.uk/42309/). In: Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation - PEPM '14 + +Thompson, Simon and Li, Huiqing (2013) [Refactoring tools for functional languages](https://www.cambridge.org/core/journals/journal-of-functional-programming/article/refactoring-tools-for-functional-languages/F78282D0AE831BD11AD5531826892139). Journal of Functional Programming, 23 (03). pp. 293-350. + +Li, Huiqing and Thompson, Simon (2012) [Automated API migration in a user-extensible refactoring tool for Erlang programs](https://kar.kent.ac.uk/30924/). In: 27th IEEE/ACM International Conference on Automated Software Engineering, 2012, Essen, Germany. + +Li, Huiqing and Thompson, Simon (2012) [Let's Make Refactoring Tools User-extensible!](https://kar.kent.ac.uk/30807/) In: The Fifth ACM Workshop on Refactoring Tools. + +Li, Huiqing and Thompson, Simon (2012) [A Domain-Specific Language for Scripting Refactorings in Erlang](https://kar.kent.ac.uk/30822/). In: 15th Fundamental Approaches to Software Engineering (FASE2012). + +Li, Huiqing and Thompson, Simon (2011) [A User-extensible Refactoring Tool for Erlang Programs](https://kar.kent.ac.uk/30720/). Technical report, University of Kent. + +Li, Huiqing and Thompson, Simon (2011) [Incremental Code Clone Detection and Elimination for Erlang Programs](https://kar.kent.ac.uk/30770/). In: Proceedings of the Conference on Fundamental Approaches to Software Engineering (FASE'11). + +Li, Huiqing and Thompson, Simon and Arts, Thomas (2011) [Extracting Properties from Test Cases by Refactoring](https://kar.kent.ac.uk/30767/). In: Proceedings of the Refactoring and Testing Workshop (RefTest 2011). + +Drienyovszky, Daniel and Horpacsi, Daniel and Thompson, Simon (2010) [QuickChecking Refactoring Tools](https://kar.kent.ac.uk/30636/). In: Erlang’10: Proceedings of the 2010 ACM SIGPLAN Erlang Workshop. + +Li, Huiqing and Thompson, Simon (2010) [Refactoring Support for Modularity Maintenance in Erlang](https://kar.kent.ac.uk/30627/). In: Tenth IEEE International Working Conference on Source Code Analysis and Manipulation. + +Li, Huiqing and Thompson, Simon (2010) [Improved Testing Through Refactoring: Experience from the ProTest project](https://kar.kent.ac.uk/30628/). In: Testing - Practice and Research Techniques: 5th International Academic and Industrial Conference, TAIC PART 2010. + +Li, Huiqing and Thompson, Simon (2010) [Similar Code Detection and Elimination for Erlang Programs](https://kar.kent.ac.uk/30703/). In: Practical Aspects of Declarative languages 2010. + +Li, Huiqing and Thompson, Simon (2009) [Clone Detection and Removal for Erlang/OTP within a Refactoring Environment](https://kar.kent.ac.uk/24061/). In: ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM'09). + +Li, Huiqing and Thompson, Simon (2009) [Testing-framework-aware Refactoring](https://kar.kent.ac.uk/30587/). In: The Third ACM Workshop on Refactoring Tools. + +Li, Huiqing and Lindberg, Adam and Schumacher, Andreas and Thompson, Simon (2009) [Improving your test code with Wrangler](https://kar.kent.ac.uk/30576/). Technical report, University of Kent. + +Li, Huiqing and Thompson, Simon and Orosz, George and Töth, Melinda (2008) [Refactoring with Wrangler, updated: Data and process refactorings, and integration with Eclipse](https://kar.kent.ac.uk/24013/). In: Proceedings of the Seventh ACM SIGPLAN Erlang Workshop, SEP 27, 2008, Victoria, Canada. + +Li, Huiqing and Thompson, Simon (2007) [Testing Erlang Refactorings with QuickCheck](https://kar.kent.ac.uk/14543/). In: Lecture Notes In Computer Science archive. Lecture Notes In Computer Science , 5083. Springer, Freiburg, Germany pp. 19-36. + +Li, Huiqing and Thompson, Simon and Lövei, László and Horváth, Zoltán and Kozsik, Tamás and Víg, Anikó and Nagy, Tamás (2006) [Refactoring Erlang Programs](https://kar.kent.ac.uk/14394/). In: The Proceedings of 12th International Erlang/OTP User Conference. + +Li, Huiqing and Thompson, Simon (2006) [A Comparative Study of Refactoring Haskell and Erlang Programs](https://kar.kent.ac.uk/14424/). In: Sixth IEEE International Workshop on Source Code Analysis and Manipulation (SCAM 2006), Sep 27-29, 2006, Philadelphia. \ No newline at end of file diff --git a/docs/wls/1_highlight.png b/docs/wls/1_highlight.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce554ef164164f02fc3e840e6b45b7ea7e372c8 GIT binary patch literal 6242 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

?0@+PPvK6s8XFo` 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 Y1N6eD><6Bf(EtDd07*qoM6N<$g41zU!vFvP literal 0 HcmV?d00001 diff --git a/docs/wls/3_input.png b/docs/wls/3_input.png new file mode 100644 index 0000000000000000000000000000000000000000..cebf5c24f5bdac9c4a2e71fa05d751a5ef6a0c5b GIT binary patch literal 8257 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 lEl~b_FK~d5@;wdt0$Ef4{{#15bff?P literal 0 HcmV?d00001 diff --git a/docs/wls/4_save.png b/docs/wls/4_save.png new file mode 100644 index 0000000000000000000000000000000000000000..57280ad92cc6ab187b9d6a891afd4b6cf3772a4e GIT binary patch literal 10662 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 literal 0 HcmV?d00001 diff --git a/docs/wls/5_form.png b/docs/wls/5_form.png new file mode 100644 index 0000000000000000000000000000000000000000..7c75e34735d5c730439040f795dc66b460ae03bd GIT binary patch literal 19113 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µk~5oomacI}qn0r4Z#g*lBYGP! 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 literal 0 HcmV?d00001 diff --git a/docs/wls/6_comment_out_spec.png b/docs/wls/6_comment_out_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd2ee9c5637a70f9883c73fa20d5924c8b9b660 GIT binary patch literal 5629 zcmZX21z1#V)Boavz|u&!bS~X2ozkq*(zVnsT@nI{fPl2Hl+;oJl1iu2-5nw&B1-4C zKF{-i-uM4~=ep+1oO|XsbMCqCxz0T&T2Duf07L@<000CU>dFRajzp6<&VBTqwq1f6 z0KkxkDJkh`C@C@NdBPoFuJ!-`XQHi@6{$KeXP>pTl~vy`4;RSO&*0Uo*9KOhpF2R2 zE%-I~kD~i~vEnf>WaZiL1!%~hHGl5F$>-k>9}@cRX(-!-xT%Vw<7um3e)Tr0lmQD- zR7k-A+?A8hN-@`a+||+X7GTGdo=z4v$0y&QPBNx1e~M2mP2Xh!wBb;g!|rfa49|N0 zokzYw-c!{E^yUV$Z$?9rR9DSL=>Q8O-iqY`r7aM6Plt^@rO+@X%xU{Nd?0`5_%$h( zniWnFxBoY`{asEfYAR|$fv_&x{L9}22nnGW52l`)ZYrvwQvm^i0Op>gP(cA#pbdsw zJ1hznkEtih4Sa|iPMqzv+&b#-o7MTb9R~G+cr~p;c&_Hvjt*5=cyO$H(n>gG{5AA9i_So3lSX)cV7VZYN zwu9T)gZzPY`A&Z*PPYKfj-!AJ|VA4EJ>87nGEgy{8h~4Gr{`{ZD@X0spu1e*^ytY4V?t|9`~)Qv3sy;r}!7|4PK)S^jGjon~2( z4FA7NCJUmq+>k==3{eebg~$FF2j;lmPgEL~Gt?B-)$cvTg(^~Yk-ectQY#Z1@`$|( z8;i*oDPdA<1X;e}7kOVzOd~sdO|DNF$LoMeYnS7yimQZ4`cf;BSV;HjRnOJOfR^<2 z=OX+owKIe7&3v3cqI|QZ(3k`0u$H(5!&ex;zT8<|) zOUxR<#X8wBlotLN1his3T`%wwGc#j8*nY`3t#|f6Y&}z+y-sLs6jx1Ph&yb*W01Q& zF9`7bbQpBD8&}rWcD4(juQOQ)vr-#J{xv8OdMhL5Iv2LH z7#JAd3fY5NT3Q6$7DUEv7rCn1Z=0q>Z9n6G^82=`6h+uS ze0y_+F$8s|xjuY>Yt`Bji z4OmA<=bJvo;b;ydmLvDsFQcH5w{NM&#JlS(`w~e< zYwEYhyz9z2OXMztqN=N_H&7D>gC1Kr2oDdgbR#Y`kA(Lz7hV(l2v#IstAT+*lCsy= z)lXii$VAcL_z+((cIl_FoQj0n7&Z@Y@5qD%BKOrczWyw03A_wE2>bKH@89u9cr)8R zvOzn(5$@r_EwLwW%Bt7Evr=?E~O%qZ+!-{YWVZ ziMLt`qjuW7J{85t^mOdo3Jq&(Yuq*BXK4#v{-EbJ1WsBUI~TRAGxEi|Y14+w_sBoU9|@GG6DrMChs99{bT|~Ozjh^W48v%MSsd!KF2KUCo_CU9G3({C z3VXjHChR%qgaLFFqZ#Ql^uVLCD*rhAnoi8L1AvTsDO~ep=^hcL7{i*F^At|K^K|$v zUtllN`s+ELaYykcH_gka&oa5qz6Y6El)skZT>&);3>@nZeXA^5JAjASsT6#seHW}m za|ERyv0SAp%k&FgR#VB|9788BOv?@5fBkuJezdu9fTJ2HI|1!8U%QxFgtzlq;e$Y3 z8N!Z{!yPq!kBu8#GwRxS>2pXMXoph^!RGiCAOt z(cccEIZwM33)Kkdr5*#&1<3afaD>R1D&=p#Cbe^XBdK3y0eQEKPa~o(BY`~^L(cOk zMP*NSvRJz)$8E6zmwsp3$TAfeNcbqHw$iMTFrD8r?X(5GyM&%-|A~4Y^z%P z^|n_szxwWYK@@(EuIvS-+|BU=92?N$14c%E8S(Jfz!IToZ7Y^M5D3J(@I2=Q6RZ9a zx@MVhG}@*j!wMbqP}Vfk869l&s>u`HeJI-tdTHOtnNm@gnUo4v#tG<~T(vS?6U9+g zcd7sr^wQsJt>9A>m}F3TiBD3)1bNGz{13i>H-&u)yf* za=)tHhP!u~z4~c;$WyAOK)mYBITK7~NDR9O_a4US#+}DW~ujd_eAA-SzPn*0+d~1q}Q>&J1WzvRW zsR!G~t$v3VeDih>pvr8ZIZUxYc3*ZB5QNGgVNu12O`i-yp*VKjN|Zpt((Bg!sXRuJ zcIs~uJ%?dsBJT7MPDl*fL-kz$4P1?l)O~i)U;%a!qO}Nju*{$+#@D53f`!EHILWTn z6Ph1wC_C##hk2aODnW{{6SQpcAAih_8u2|?&@imjygECqB8PHS_JUF235o@Ygd?zs z&#WaloW8P?zCV_@XmKb8RZhE?T0P>rPe@94E7Ff$ZWa=K_F7q}>$J92pSJ|JzHuDI zlH}UNOlr_r_d>KPn@VHkB@&zXZI5KzTY2!6;7;}{v$f~CNd+F4q_Iv)N?wxPGGf>d zrtxju^zEW#XB){H9OtU7cgEgD%q2o$_M}MPfOjZk`F@09RM@?9Tn+-`#@LU3H{V}8TaS7mG~F> zg{iD+ljFr!M5M-S0D9&H7O~xJA*3;X9=J(#FZ^>S!PXoXSL?YKj=jSa z*UutwG*B&`ZoJo&=(52DQ6( z!>KDl1dCwJ;{F zmJ5bdi}&dv3C{HSj8A+h_K)J7!(I`6(Oj@45Q}}^NE&cGkZ|rlNyl2qW;)IZ$;>@v zzKg@&+)9n~StPj{Uk#8oT;Xk(gv~yX8(R0MAuSq?}0{;J289;-l$f!tEY@9$(IL;CV3hl&MgmTe5Gi8L`)0L0^on zSt)lRnU7%<(Nge)o?ZP=)x`MT{N7xe(h+G*jEsm_ygls@EQ`3kZv7X(4JHw%^`&eB z6MI7KQUO8vKO*HGS?EMaiYFm{ywBh?K+)uo)a(0A@F0#(6s&y-EBP#=Ql4TL;>^m2 zM(SQYnCp}jPhQ*EGsxe`RJwe)whKmhd!-8TYg>jb6;5DN`mi|ahMNrod^vx)7p-s4 zYrYBCElWAbGv@6ah`97~;n@0ya_j>PwdI7B^a`)7ZSX<^YNtbcmCjtVI%6AtH;Y@C?iMIs+_Cfy7RcFAfWv%ZT-G@A~qw_3+~!Z*dCW z$(@j@_Mi{qH&3rvjtus^QI%%YhuZE{#`2FQDj%;K?X75)zTlG}K1{vQA1xCLS{rD2 z(x<8OqM#XBDs;y{Pkel3p}tas{o$_J7-O9JT@`^~kr{!66w|(^3|I%5fOj~mqF^Yt z7y9$121Fg=*a6jL_E{B#xeUYyBPutF?kj@9x1-Nk-RHO(Y(kJSv?io>a&Pgtq|IjC z({><&LF9Tjg(W{0?BWE58GmA#&; zymed)Q*M0g*cX#R6<8bYz2ype_(MI?8ava4(hXU>r*?(G(BsD?;mt9`r4-jsGF7|k zn;5%RsLEQhF1zx7J*F14ha0EhiHb^c+_G1`zeer0)d4Uzs4dK-q9;YRwk0*U_ViH{ zbdV*4&p6GJ>^ZzJH%4KSymoC-kS2P+9ZH*u!|JviG1aQ(v3*W0@-!e}i*!s^FuiuF zaed;j3&M&+OjKigxCc=+S6 z_og&JhFjn}14TtkKw_lZJzBZ$`8)+6^o41dch>toRq2uu{ysJL5b&>Gzk9s&s>-5> zHlS576NKP;60RQR%E3_3s(5n>mCGYx`x2|XGPNhAi-W^>2YZc)OD3O8)CZdyl{RN7 zxQ-Fx@RbySyD{Sx?XGnbIjv%xTtj^ur}&i`R@i3y+GGuG7m8cAu*GVRNX^4OWIp9# zM&;vmzxeD=RUn;&l-F-JPATl{-U)C}x;tMMs<9B)kAVAlbtXX`rQcX`rW=Db`5t*^ zREbo3ND`kUP=ivO_ntrt3T(>s=(4i)QY--+aDJ>Gw#7o4c<3*t=X^!*ib##BGVJ6b z3&#Tm+2`!pdhNuM3(;%NBr`)P6bA3pxQ65v^f6k@V^QP8?Mbjq8w&-7kE)ZbkmhsE z_%C2aaqR=sOy8|LMMRjgvhv!`^=?y<3EeEEwT>Kwo(1<-^G(SLsx~a%LW!U5llkHf zn;aj#-~&0s?Dgn849H_i2*Tyex-j?kc=`B=7z-v+VRuhb5#0;an} zsrT($0J`JI9UlpET+(19Xkr=#onH8TozkAlSzCb&Lrn?uy>mg;N-T#XW4MgA^%Bs+Q&?Tp|23KAS$p9 zc&D^jBD~aRd55%j`C~9Jn-+cUS0l%F7cNoG^zH5qwHsECyoegetgJ2}HcG0>F9@`p zmH3!g;?dpZQ(&R~>uXffiQ-|`3HA#p%_?d<8If3#{{18ET4rBwRat37c^Ov>6bH3g zXNyu<9^YJH8rzHU&WG5*rpkve0P4d}lT3{tBJ6VI~p+F2`@-@zDqmQ91 ziwZ>}cRn)%xfa*1f!q%fr;+s{>Sf^3&}K1;&Tc{Io3T z@t?EMmDVX7`uS>9i)$qR*0Z(Y>^fxfPb>OjSW~Fv^Y~y}8dEkhgjv!QvH^Da76#Eo@_ZIUp1tR^L}^>~~)Bji(UAsKf7#=R4xMt|Mmh2~35VT#Owd{nV`6(mIB z*5#R4Wzo{pr8kJ}+cTR5seNCEqc1Vqd`1|KYL18~v5-93S=nR5v_icbp8N*f>XciT9*+l|lsz-791rJB4PI;#R6m)sQ@wA-_p{Hh zph0Y^&++b0cX=1=B(7@}HtgOsa7*hPHhgnn&C%effr>lBE*VEM~-`|+`=e`%0e{X+>=IulW-*9h%5#2wu{QJ0c Q{`?2jP|;DYRJ02JADH-StN;K2 literal 0 HcmV?d00001 diff --git a/docs/wls/wrangler_language_server.markdown b/docs/wls/wrangler_language_server.markdown new file mode 100644 index 00000000..1425880c --- /dev/null +++ b/docs/wls/wrangler_language_server.markdown @@ -0,0 +1,163 @@ +# Wrangler Language Server + +The Wrangler Language Server is an extension to the [Erlang Language Server](https://erlang-ls.github.io/). It provides Erlang refactorings while implementing the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) through Erlang LS. + +You can read more about Wrangler in the [Wrangler documentation](https://refactoringtools.github.io/wrangler/). + +# Installation + +1. Follow the [installation instructions](https://github.com/RefactoringTools/wrangler/blob/master/INSTALL) of Wrangler. + +2. [Install the Erlang Language Server](https://erlang-ls.github.io/getting-started/overview/) in your chosen text editor. + +3. Modify the [erlang_ls.config](https://erlang-ls.github.io/configuration/) file. Example: + +``` +... +wrangler: + enabled: true + path: "/path/to/wrangler/ebin" + tab_width: 8 + search_paths: ["folder/where/you/use/refactorings"] + enabled_refactorings: + - "comment-out-spec" + - "fold-expression" + - "generalise-fun" + - "move-fun" + - "new-fun" + - "new-macro" + - "new-var" + - "rename-fun" + - "rename-var" + - "inline-var" +``` +- Only `enabled` and `enabled_refactorings` are required properties. +- `path` can be omitted if Wrangler is added to the PATH environment variable. +- The folders in `search_paths` will be checked once a refactoring needs to change multiple files in a project. The default value is the project directory. It is recommended to narrow down the search space for large projects. + +# Usage + +## General case: +1. Highlight/set the cursor to the place where you want to apply the refactoring.\ +![Screenshot](1_highlight.png) +2. Select one of the refactorings from the appearing menu (code actions).\ +![Screenshot](2_select.png) +3. Provide additionial information if needed (eg. new variable name).\ +![Screenshot](3_input.png) +4. Save the changes.\ +![Screenshot](4_save.png) + +### Wrangler forms: +In some cases, refactorings can be done in multiple places. Wrangler highlights the possible refactor candidates that you can choose from in a way we call Wrangler forms. + +Select `Refactor this instance` in all the places you want the execute the refactoring. + +Until you choose `exit` or select all the possible refactorings, please do not change the file manually. + +For example, while folding ```fun_to_fold```:\ +![Screenshot](5_form.png) + +## Supported refactorings + +### Comment out spec - `comment-out-spec` +Comment out all the lines starting with -spec in a file. +This can be initiated by a code lens at the beginning of the file:\ +![Screenshot](6_comment_out_spec.png) + +### Fold expression - `fold-expression` +With Wrangler form, replace instances of the function body by the corresponding function definition. + +### Inline variable - `inline-var` +With Wrangler form, replace instances of a variable with its corresponding value. + +### Generalise function - `generalise-fun` +Refactor the highlighted expression as the function's new argument. + +### Introduce new variable - `new-var` +Refactor the highlighted expression as a new variable. + +### Move function - `move-fun` +Move a function definition from its current module to another module. It changes all function calls in the working directory. + +### Extract function - `new-fun` +Introduce a new function definition to represent a selected expression sequence inside an existing function. That selected sequence of expressions is replaced by a call to the new function. + +### New macro - `new-macro` +Define a macro to represent a selected sequence of expressions. + +### Rename function - `rename-fun` +Rename a function. + +### Rename variable - `rename-var` +Rename a variable. + +## For Wrangler delevopers + +Wrangler-ls extends Erlang-ls with additional codeActions, codeLens etc. The `wls_utils` module is used to convert between Erlang-ls/LSP and Wrangler type representations (eg. positions) and to provide some LSP request/notification constructors (eg. textEdit, showMessage). + +In the Erlang-ls side, first, Erlang-ls loads the Wrangler modules and starts Wrangler. Then, `wrangler_handler` module adds the corresponding language features for all possible requests. + +In the Wrangler side, you can find similar files and erlang behaviours to ELS' `els_code_actions`, `els_code_lens`, `els_execute_command_provider` modules. (These files are prefixed with `wls_`). + +Used [LSP features](https://microsoft.github.io/language-server-protocol/specifications/specification-current/): +- `codeAction` - to offer refactorings for the user +- `executeCommand` - to execute the refactorings +- `applyEdit` - to apply the code changes on the code editor side +- `showMessage` - to inform the user about success/error +- `semantic tokens` - used in Wrangler forms to colorize the code`s foreground +- `documentHighlight` - used in Wrangler forms to colorize the code`s background +- `codeLens` - used in Wrangler forms to act as buttons + +### Providing user input + +User inputs (eg. asking for a new variable name) are handled by a middleware in the extension since these functions are not yet supported by LSP. + +To request an input from the user, add the following attribute to the command arguments (`text` field is not required): + +```user_input => #{'type' => variable|atom|macro|file, 'text' => <<"Placeholder text">>}``` + +On successful inputs, a `value` field will be added to the `user_input` with the given value. + +User inputs are yet only supported in the VSCode`s extension. In other editors, default names will be used (eg. "NewVar") + +### Adding LSP support for a refactoring +To make a refactoring available through LSP, create a new Code Action module prefixed with `wls_code_action_` implementing `wls_code_actions` behaviour: + +``` +%% Title which is shown to the user. +-callback title() -> binary(). + +%% Identifier of the action and the commands. +%% Same as the file's name without the wls_code_action_ prefix. +-callback id() -> action_id(). + +%% Initialize the action. +%% Optional callback. +-callback init(els_core:uri(), els_core:range()) -> state(). + +%% Whether the action is offered based on the highlighted range. +%% Optional callback, defaults to true. +-callback precondition(els_core:uri(), els_core:range()) -> boolean(). + +%% The command`s arguments. +-callback command_args(els_core:uri(), els_core:range(), state()) -> map(). + +%% Execute the command with the given arguments. +%% The first element of the argument list is the one returned by command_args. +-callback execute_command([any()]) -> [map()]. +``` + +Register the code action in `wls_code_actions:available_actions/0` + +You can see several examples for this in the projecc. For example, `wls_code_action_generalise_fun.erl` that implements the generalise refactoring. + +Alternatively, to understand how ELS Code Lenses works, see this article: [How to: Code Lenses](https://erlang-ls.github.io/articles/tutorial-code-lenses/). Code Actions has a similar behaviour. + + +### Wrangler forms + +For refactorings that need more complex io (eg. fold), Wrangler forms are introduced. + +To make these forms, highlight, semantic token and code lens LSP features are used. + +The form's state are handled by `wls_server` that can be extended with more of these refactorings. \ No newline at end of file diff --git a/docs/wrangler.png b/docs/wrangler.png new file mode 100644 index 0000000000000000000000000000000000000000..a45bfe15a3a6847d56b90161b4b629d135e5339a GIT binary patch literal 32415 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