From b4c6bf3aaab1cdef529ba4aceebacd43342074f6 Mon Sep 17 00:00:00 2001 From: Andrea Moretti Date: Fri, 24 Jul 2015 22:07:03 +0200 Subject: [PATCH] React (JSX and ES6 ready) contribution layer --- contrib/!frameworks/react/README.org | 75 ++++++++++++++++++++++++ contrib/!frameworks/react/img/react.png | Bin 0 -> 13425 bytes contrib/!frameworks/react/packages.el | 68 +++++++++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 contrib/!frameworks/react/README.org create mode 100644 contrib/!frameworks/react/img/react.png create mode 100644 contrib/!frameworks/react/packages.el diff --git a/contrib/!frameworks/react/README.org b/contrib/!frameworks/react/README.org new file mode 100644 index 000000000..45ae90622 --- /dev/null +++ b/contrib/!frameworks/react/README.org @@ -0,0 +1,75 @@ +* React contribution layer for Spacemacs + +#+CAPTION: logo + +[[img/react.png]] + +** Table of Contents :TOC@4: + - [[#react-contribution-layer-for-spacemacs][React contribution layer for Spacemacs]] + - [[#description][Description]] + - [[#features][Features]] + - [[#todo-install][TODO Install]] + - [[#optional-configuration][Optional Configuration]] + +** Description + +ES6 and JSX ready configuration layer for React +It will automatically recognize =.jsx= and =.react.js= files + +*** Features +- on-the-fly syntax checking +- proper syntax highlight and indentation with jsx +- ternjs turbocharged autocompletion as in js2-mode + +** TODO Install + +To use this contribution add it to your =~/.spacemacs= + +#+begin_src emacs-lisp + (setq-default dotspacemacs-configuration-layers '(react)) +#+end_src + +You will also need to install =tern= to use the auto-completion and +documentation features: +#+BEGIN_SRC sh + $ npm install -g tern +#+END_SRC + +To use the on-the-fly syntax checking, install =eslint= with babel and react support: +#+BEGIN_SRC sh + $ npm install -g eslint babel-eslint eslint-plugin-react +#+END_SRC + +If your project do not use a custom =.eslintrc= file I strongly advice you to try out this one by Airbnb: +[[https://github.com/airbnb/javascript/blob/master/linters/.eslintrc][.eslintrc]] + +** Optional Configuration + +You may refer to the =web-mode= configuration for fine tuning the indenting behaviour. + +For example to have a consistent 2 spaces indenting both on =js= and =jsx= you may use these settings: + +#+begin_src emacs-lisp + (setq-default + ;; js2-mode + js2-basic-offset 2 + ;; web-mode + css-indent-offset 2 + web-mode-markup-indent-offset 2 + web-mode-css-indent-offset 2 + web-mode-code-indent-offset 2 + web-mode-attr-indent-offset 2) +#+end_src + +And if you want to have 2 space indent also for element's attributes, concatenations and contiguous function calls: +#+begin_src emacs-lisp + (with-eval-after-load 'web-mode + (add-to-list 'web-mode-indentation-params '("lineup-args" . nil)) + (add-to-list 'web-mode-indentation-params '("lineup-concats" . nil)) + (add-to-list 'web-mode-indentation-params '("lineup-calls" . nil))) +#+end_src + + + + + diff --git a/contrib/!frameworks/react/img/react.png b/contrib/!frameworks/react/img/react.png new file mode 100644 index 0000000000000000000000000000000000000000..15ea421f4f694898521030c9de6c427cb37c56bc GIT binary patch literal 13425 zcmZvDbvT{>|34;bG57C^nsP##&`sM-rt`Qbu2!WU52~=oUnUYH7|7%AAN1}Z zG!-zVut(tEKV1aDXt>!B;HSvzT|tZ>TuNc+|NoW$eOq=9dTZ=$BEy14ONgk9hAi_+ z>=g?cWBluwL0$f7J^o}HRbE!6I`r<=_Y?FX!ca=&`GQSTyIIO_vXo(!>aO$n<^Fi# zr%zc<^VAbW&?Fe<#&Qn%N=M-j3TfGvfD+Gj#isLv79Rqff^G~s>bS{ziiBNUPmqDOg=<)Eph$8 z+_~-nkvFYc0Tq32F8HyXSR*^&ea(X-lqBmeadC$RwpiUk#~*T#>ZkegsL#pk-EFld zPeLN@>4G-x-5?4k=**kyoG7JoF+}awE^R(#NSFy6j8+8KI=}kka*mA7lS)=Eb#l4w zQ1TAOJw!SPd%#QQn3K3Zj9s^~@2ATzT#KA=B}I^-xmY?K94D7u*54HW@Lm`yfl?If zDgiub@rdas;j}IMBd0p_ae94Xjq9Bn6B#ew{o7Za69J9_MI_3!u(3#Rs)A=A^4gkp zXhj1r%F%X88YsmNx^*8CXCz4CwAl^sW!e`Y?+fbhE>%T&yxA^}rGcF&ntrjL)T?w; zZd`2@VL<$V$=k)OgL-^(mG#i0SI=AM_lycH6@BM6Jh zD%rc6(SuSB)T|T~J!33Y!lT94^91S!yK)Boz5C)D!K-o0jlBePf6C1d?FT(Squfap z6GUi)z2)JZdKDO!36D;D*w`f zlxRO6Q_thG)EP013`-n!pT!wHhdi)ks=o@IT`{p<%eZ|a!YNxpJ^pr+dv{OUk(0-t zzY)jhNF5cuc`hM+py+m@VA>}V4mpXv4D zmDEZ3X{~b!1Wi8iK{7RCeIXWv%qcR3PcIVMHD4hDaS;2g;G+KGi}np1b0W=)jVuGJ12fH?xy38^T+9NJSoxL zzS&&F31*!vM0_?dnv=&T>gs#&zGTmoDQ*kXSDqr&h)@;NHkr0Btkd4S5B6~i77J4hL9Jcng@k-P4Wr-WQFUxWKr9Tg)+f8=fy$ zY{od_p6^&MS5RLerS~c2=ictC&g0P?O|8h6Gg#D%x40G=!}K$~u+P54NOb?81{WJS zFOd)FUJ4v>g;Tz?H$ne1XL~{Ydf>X^piZuOx)P{BDuRqh_j$e>l-;d&~XxIJn9FV}qZ@ zoG;V&)kS1kDLQwFwf4ZR@HV`*bL@#e6c|M!yjslcsYQb&tke`U8v=`-m+J4-Th?$2*%5)Fk^&G$l6X;D@S2_?_53wB6ZnY%)KPt1e#5?d^>nVkoq?N+teX z9$zma24AE`wIr~&4|%@H>R%wAF}}x6ulrX0n;zJ;!UPlE_&bHPruVAWV%}6qiTZLW zcoF{=9EOok*37>9Q1T$mn?NDk>+8dlc`>!)qKT9*{~X5-;o-^C6Xo^FOZ-=1=p*{D zB=)>gj&VEgPype!i+GC#3O?hFd-;4>;VI@|b{o!^6V45Jy0v**-Atv1<4nM@9OcqV zCB-)rS|#if~7g1lHa7$Bt~()1{%6Vw)-A4_`h9Ymhpg zzSIrqNbDpWXJ$DLSxS$5p99w&)#qAHL}*ked*46b*bz7g`tG7{P}?!%)~ZaDcc48{ zGS}fvvRcx(P131qWAbgx*$0pGEv>^Ng6b96&DmDR?g(?k!(2{n8xD{*k8n=xc87*IDB-nDP zY@&YQg1gNtRv0RL1)bJ&3k+^fCGCNnCrZQb_dds-=Q6cmJ4PA>c)k3LgT2?&=~V_N z_ZN&Gw^H$cJL71ajOj$(1mm*Hj-_GK?kY?4t8oY8Fud2jRcFEezVq2Zv19nF zCdxwHZ189=P0=NqWWY|>8dNSs;r-qzBuXkGQ{d1)et7+FVIN#||{~4yXKC{5; z1Cm&TO0b1=l}Cl6LKhNfL)E3?Ms5ql{!f-}>of;H!p3MZxCT$#FB63GaG zyfK0jB^5k7wbk_CnQ7$$GcHWArxKUxO*fU_YfqJfFUO6;bNJ?L1G`DSg^koDj=3X; z;s+CS51>((I0Yw^s&QKK7OQ{Q56Qu+yPR>-(Ht_9SE-|3PG8U+O4d9=z5x zbk_pl42g$@hpk_vDN)PJks=32hpchtALJv+Rlpn&25@g8IioT4m+mD$S1mKyt$upS zE8b~Xd%8w*OYH~m2A3Z`?UDGwJl&OOz8=Sr(zylW7~CbYmY{^}9<{~hH)n#|XND6# zwf%KermuTj#V9tGbl@q(F+LPu7o!9JFirJRNcrrNsen6Y>Cm?gvx;XzX@p%oWUcNOhAJFm_>R>l)Oq_7`GhngfgG zU|M^oM*YX-z*^CLinl|}n;6&xa7#rw=<00)lC6;z4F34sT@kLVix)ggR7>@G>RpAF zE!q+6d|)I%B&K5OUn_x6eOYZ75=zFqdA5p;2x4!?w>wMzGa;3Hx73kk-&fiLpTA;0 zb63=N-(*Xm0KN2NbxM_pzqaRNYj!5W`6|ipd@LiC?D(Y%PCwzkH(c67P{}H>{$Dl3 zZ^Vw@LZLxO^XW~}3{t=(LI42B%xGjr&t=C$Z?B1TUZ7&d9`h`7KDm#vHFWUHARg#7NP7^lnb<<=*{E2#1_rcfKajCBuRzYG)0? z^e;o>2Tdw9DQ1UoyR@4aDwuJ*zUq=*H=1+Oa8dG4ydz(H&Hsao=wNfInFds+POaRA z>UiJ^w>J*pzYIFXfPvM=i8Yzhald}kAhZ85%hYaFbdR)Ll++`m zexxg})2yBG{d&^SFo^1wMwt9^*HsYG=0J9yh?d9i%5V1=A4d<@C=CVnOcDUX`ujgi zv=8taX2!y^-asaZBu%)*O;}vBbW#sb&we zhJQTkdJ?mVVg<&EMvsJkTbwDR$q_FC_$#-tFLI2Wp~O%ojBod&xu@KJs{1dd{w#;~ zxtwPD$1|JSOhi3-m81OH^jdb;qhw1GzGA}wxiTlM;N0zhbSR-Quo6{s>q||?A$9YQ0!ug(K_C%`kQuwq-zFr{*gmnR;{o~1@<{o zHT4;P`4EivMXH(euV%V9AoQ8;PmCZlyJgg7${rJ&MVu)A>q8d$p+=Nn$ro`(Pb;nn zZVwpNzFda`--&%NGzzpU=H#kg0(!%J1#aYU3GIH(#I>L6o1I%;o|9IH$iCJC>8lgX zmrVyY?ex@4+kq6Ly-Yxnp>xWO~Xh6Ox0n#k1zHVGl(t72x z@|3f}ww$qhs;+V6%1?~NXhq36l5Zh{x<3==y*{|!vg%;8wS249i=1W`dvL$$5b_<7 zDZzmuj*{4lqt!T;zO->i1m;On6;_G_A1&DW%HaHpjs$S`kXN(_3(k&SY-7hc4uuL` z7}K$g+zke@LGeoMX`4b+=DyHnNE#TJ)`w~RVIm)@iV=7;3%9&qXOfVvF zvJQ^qD!SD5L+_Z}&$p>wk78>?HzdJm-19|TnXxd%FW`P@9NcC@{BB9i|M5}{;85nr z#!O5zlF!38%b#zO$Obbm-**0F5zK<;Jm58VuZbw)rT;CjAA*NiObEs0@V*r$Nh=_vK=UI#J#;;bH+&6|Mlf`yydUGyp7>Z$*2HrDoJ)=ir4PG~H2 zt(HT9>U6^ur3C1LQogqgg|MNkb9P|W+~fGF@tcv68_5Ms^`WRzt{`4@alkEp0xYlP zfI>I!T`ex1jvr$N*5_tgt9z$w@82Y}p5_BJitfz56$DPJCSN4kIg=X6-Ea=V=-aX- zyA;1@3KLZjYf?@{X_YJj8-JpT@iHqrbUP2#r~&~iX~3P@W<~!-;*#3ROyHf`U{*U8 zy-Mu49j2=wwU|3n{2O9wukH7P31vN!Fv$| z@Y8w*pgx2-1o1yHu<^X<{;FBD!39=a*R;+115wnxoq9iCz^bjLnJI`h)8Q6-E=SjN zFEsto0ChZv0GRjZmd(j23n2;sN;qAP(A0K5!+kwW4ha}nF0E|~t5-2U)?J@`5mZLg zly%FUN@X;xjPYAOHA15a4cG{Ksz`aAy(j&?jfs+z?0TN=`uK5tEm!c8zMDvms$JeC z^@`#FPsiEYfScxKkyK&RDPuqVOl^#|h6Ipj$Z z0nmc;Tu)xOTkLDMH%YQ?5Km33UbZv|O(pZ7je)1$mC@-R6t+Lg8^=K#I3#VB_PX*n zYb2h-3L!h?uDvsj{*aG_rf( ztG%2(6rtfQEWi|lRo6rPNS`+IP3gx2orJ)=cL0OQoc$-z-TsH=S z>S8{vlV$C0OgOhawdZBxO;%ni<>%;%yPO&rFKkS1P=)Hskxn^cqu5x&@g-&XT#YG% zh)eOC_%GDqc@Lw*&z}uF&g}Z+v8eoXnYA{|p zo#7LtrbLpSY~7F*H{%ZQl$f$NNw2D{8mAZUIYTS9;%L~4*DvLI;%_pQxre;30dz>e zzA1fVoCzb?5sd8~OL%>tX$w7!q;5Oc|FG+GOQ`Kh)y#xDS#H_nn%zBf9%pz~SE~)9EfARkZMheRj`Cm8B+T2&$*6Z69pM!XVnIO;Qz|a=Vz99K zH4Fqo+&km6jdx)RuQoqs>53HyUKSY>@P#aVf@g@KqW_n(Y2+gPdoZIFo(TJ{gZwL_ z5&TVty=g@Qii2;7BRk!Uf;fDpL-`zWbqau>7kh5W-%R9O(YIOgR2`dI@rmt{#^&P> z^T!ZW)^)OXvVvjcth0t&I~FCN&280Bs_(3i)+Rfz+rks%%4mg<&Z{gsd}6n1SN@54 z4fT5BwC)G$sfRpgxKM@rc2EyNTjL#>UncbY#p|CsiWoh`itW71V5bS0y4mZcsf z`umfz6_OoZd#n8EJ$>3Z9%&??bvp9#4AH)PyMafhoRnG_tbYOYzeAG^4^M(<7jIX- zJ#dRPzM1w&qfXU(47TkNU2O07`Crh@O4X=BXd5lO%dY)mg6Bf-9;Ff!vut=J&U!>= zZLum_fL;E!j$7NDQl`>x=|ZdB@y%9j*5RBbF93u;e5tx=l=-Jj^rqN`Te?n8oNGg_Z;Uoh;JiAoeo`}FsQ3O;og+Us1jPUT<>v<_qR8eLbarnEb ztJnR%W@qdT_sgO|-&@NQOck)9cFrj2 zwCs!IC)!pG7`2xRpS!BEz97s&t-H&EsD~8jI|@t*_}T9(kWCAn2yw|JAMvl+E4QFH zkm)s8zdbLQJ8H(8S8~skrG>o+^-|>$=k`C6nA9D|;PZ_-s=v@?znXr<;PHx*!|VBGGZB@r6AUp{P{BFoE_tJLkGrJsbVkvC}sex$dL zpNzL+-&KnRZ;?;?<{rAIn=)b_!!|zljAcZUVd=p|GhN&CbmQ`#^gZI&Wl18m+ z$VV9m^C#@$_lT@{;n;7?JA70|WE#JWxY>giu&jpm{lC^k>Xyw|7*4a$4R&}-EjQ4= zG_Em*J3j{tArq%Y!{^Ux-C+oM;TGaP@d~T1_cO5O;D=OF7gfq&h`=?PLWWO!?|=20-N8|kV)yWcIGHm21+{0z<1-1BXL zk76uP9aWOd?|AhgQkTM z(xu`iCDp6~RySuUoauSF^JjQfoH9zE5+*DZ^d(XQ=k&i%Sx)p}0Y#05BuJ1?n03h> zI&xsduI0ZB@^9mqPA-r<5$M(TnsLvvql)hTaDZe^PxCzf43nqI)efkjmRCwQ9W=IU5~@`dNNCoWsn?7+P`3 z3z@j`U;qZP{iB$62*Hq9;O)Ki4LVJmOH4g?6y5|A*}J#qX#IG2;Zxd%EBEhz{Vr&A zatfkYARylINIo~UoBC>)|ATz58Ry)a6*<-&x0D?42I`Dx+b$!mL_w9Tfl=U--|nP; z+(NWFwPUJ+!e_qR#48j*<*RpvpOt>iT!42hP>$2&&t>Tdv9taJpc6nf1<;8NKFl07 z1rHS*5ye$B>Gt|C1Rwx-1*gp#RY`KrHBOd_eg7eUS4kpk><{`dSJc3rmA_(ok_*4V zdg>KSl>c~XKD$_2cCQ(m8dWO^c@jEXtPY?t#{-^g5Y&lhOZfx7`YX-FiZ*?V^|Z$ku5n*TKxe_q<|?^d1-?4;jcu~tU`BJ&o}bLovUr6lUYxenv5Zqz z7*J)llsuNIw~Oo-`c}g5b-Vy=WG#}?T`AvH8u9dv#KPyd$@sXY)(?cWOflcD7FXrG#z)p}Cb^sWKAu|RNl($1qHuVZN^ptjc zX3TfidFRqPa05P@k+KPX4J5uB_Hx2ueuBl%4)kp~vL{=8P!WqcSE?cV69IC#5l`fNzv7%l z?f^%o(>z{_gO9i#-QakZ|MkTTrC)pDu0y_c!@<0=&OQ1PvxqeGG;eJeGu4()Vzy-o zp4Ek*a~zqFD?FYBxm6@}+X7BBMU6<5kI2aJV1IPaDBWZcH38l3w}VmYe7 zfu$C*nj6`MRY&I{Rgb=0Ri^AwU@c{FBjBQLlnQLuNY+`P1TTD2%`_z`oNYKgc9kSo zA?d4d|Jm6!_33EU`|c-=-@id>W*XleXAyEoLa)ZYV1cL#y9k%3qa&1D+c%|9=Q7YS z3Tlx7N&~&g=@PRJpqr@!-Eo+?kOSyNH#>3-@4l{Jh)CNTAfd>5k^&f;I|a5sG>5Jl zJS@(HM{KbgdQ^SDH)Jol#TW@+`@rcGs&m5u2o1kBvjaz>MZ*h;3|l-&@poGHhy?89 zwFE+-^%*ZGjr0#sgp+fo$p+`tfKfv0J3~2U7Me5@*og9x+U>WF^XaG%Io$AFxN{o< zEn(i@JDvEuF>SN%)CRzO<@|n$fQSGH0K=)_5vMo!Ez%##XU_DBg5M5Fc8~0WAI7Ar z&+E5#l_8((aOVoIxNRF8df(+&m)!YW`N9b0tEQ)O1?-Ty9ID;0i|(^Uxk`68M4aX; z;QD{h+xjLe-FK^+g|=NJ9M2H|&9Clylc_GFmqB990wVr9&Pe2xB>rEYU#QQ^R0ed) zW6>OOKv}&Xd-_oDWmXS6Z?R*vZA@od+-H|%x`hv#;DsHfdmva&{a(Gf5dnZt23fwi zo2*L+2n6T(Wj;spUtmOp>by%7IOW?03LGUv6R_s_nU1kA z8fQ{gx7uryl&AYw_?B24H(vy*DMwnyUB)3WvAvTdq)CQW#!jM!r5o(=H5a+ndM-tMV30gF(3WtK2KnY zbu(Ca$2fA8o@@P=-z+jB!l$G0j>DS`VJ{8WY0aq@a2)A3cB9>dGC!5hfEViKXngzZ z0lWJonbywwhLFn(usY*-E@cmJ0UWm#n?b_8fJAxsNzE}6N4!APE5mg%0T`*;t;LCN zExST81z!jC8cEY4MQ`Bb2Tx0J{7oHmTYs}5?pXslv5-#&xNU1zLDqLZM%#atX+Wp@_W& ztY|pQCT@m)X^0B(y)rUqpC4?pE{~Eg;*eSHK7$*H2F;JoeNpxbF*cuodhW5RV!cv) zVnEoYyvf9i|7X>PzI_Eqq=0FLJjyWVlwy)>o9{9BqFWtqB$U&*p{9)qh+t~-iv|r` z(`ceMO4!~AruGxd7J7Kizx&5Y`%3L}0Psqo7(hzHoJ*6$v6-6H4LX-H9WSWU5GJV=N#;ruZR6Th|GlAC5gGQ1zU`-{Q#vAW>Rx#X z6?segiRy^wEkj1OF6qWkm z{wNBAF%B96URbX6pJC1)`(4d~Ev^^JXom_?hmrBzjcH4UIsi(Wnx&-S)eT>6eD|lG z>V(F&t60i{q)#Ob%=hJo>{?FkrJ^pVjJiGWam3NOfh}xn=*~adxN`_Wx^xZ?U|%fJ z2cVhf@ix)qc3b_#eB10Fbi}W*;fsIYo;BxpZJJy;V?^@-UWOtangtiF&9P5x`&wRj z==_?J5GiUz4i5DvACBH}7TppKJh^S-B|6O9WVk`QYdU=tAl^cc!ytm1Kin&wdaAXsk$9avL*WnHeD$e|E^t! zRBVVc5v1?LGoMi2rB~W~n4@J&Fbwjs{8YH&e=v~(*xWda(LXNHzC!$#c#u*lKcV~X zJ~R1NBrYY0wEJ_4y~zhe9Lr*8Y7UC25iwi+8>s9cUjZ8fUB|KrM46W4b;eK0>kMQr z`(gsT7E#34b0;P$6EmSGBiONG$9&!sI-7tpwUU00q?eA^rq0e zdFXW(ga~;fmC+hY!VVk;DO*G7pwH;G^@6~E{a+NjU^hO4IkS6iC9$e@T_opACRS9P z!KAGW-CJjm{)r!~O2Nda^`jXLA0a|71VFg}8fdOD3;T;RGV|d)WA}U`wu?v({WseS z5IYc$k~|V3c=9UQCAr|pwAW5eLBD$b3>c05*=@!{agq;mb9QNAxo zR$2{_Q7Wy08bBloha}YPCxSZ7#VHJ6@wv@3jDZxq3C=m2J-0<%6|lQ|tYEMu)552l zOffaUtx~UkF_f26tLdX}*?3GY>-nlVbJekBlZia=jG1dU+c6euFOdWz*!c0L%1@=G zt15rPMdEz78qkb2&RWWsQW@bLrlnV)!?hy2QV`ZFHMexd4_n64kIJRwKMTuh2IzsT z4FceNkx!mg0gO_LKi{lvOdJ~>Np}R`2NJ0%+k%I`MjszK>NE_q`h-U?0R4490X)^R ziN1ju2zCSiA{xg@N46{&_GwguHc+RB8WLbzNzswpuq)`h1ynt7o(KO}^7-1Qw*ylu zGC@XiqCn|^*gQ!Lj#Gx^GObk?|E5Ey*9YxZio8b7W6IYnm^Nmt#X$>35$H5dZ~wlg z++7+4`TB?Z2iWn#IP@{)vhl5>I!;|2HDwPy#i7FuOj~ zV+nBIoz%H*Q0RiMF@Mg}apE&GMFPnQF_YLBD-pT^J8k$E1FZQcKvG9>&XQel9%RDs zOeCTHB=H5XQzbg{qEd(Xx0Jk6m>|>&Edhhrkx0ChNWNTq3EdGFKar7uNTJ7yELR+; zoRdSoL^%oeUoJByQV>q9;y19yK^8ZPQ!)ERbj^QCfF|YL%Vs!a16>v(fSVDuqspgG zlQA6k^dv!M!dWc=alnCWQH40sxA?#{Ud%FPu0!YVvS#X=ceF+%_0Pw-E-OUEbsewX zsDNL((hZWIw#}C@hI~J@>kX8(xRL;wJ$O;89g}Y>CZKuAwJO8znSka(oKy>8S1*)~ zVT9)>Rpk1cf-j!mDR)n!6jue<0f8pz7Y~mvUsGjr;H7m020;wo9X+K1%HbTr+T3D?W=6-V*sk3e{Uv z_>ko-MnbqNNy4EY#AZ|&hrlQraCMsMGroNS012wT1jd>AvDGl#3hz0z29i;~nXHkA zVH4R7lqHbQYRg~f7EZ<+L+1Mu zMNYK#Y~#{Xoc8Gl33?3!!5hy=hK_^FtQPeU*s3+?;yZlqpcxygCa~BISe*to=Y=HJ zEYi!ZT-)08sL>E)s=;3by*Cc{Abbpr*Dt(x8#^%@nknk<>}XtGKrec%b5bWR-|tXD zp(EbEC915#{c{tjqHqQuaq!KM5fOexD*|9TL}QT0Z~8r;hvCPR@SBf6rE081xD8`4 z!RASv#z#*fUGvcCby+Y1Ah;nM?^uvq5=AeUD#qWPXan&Ieu3>pz?XMc#~WF3V9~>* z3It2!|G-T^ctQcN-M=z?CMd%ez@En)mbFh~wwCsqTlvmc^ffhKbRM!W)JNbGOA{DC3o{;BLk`OXM~@cGX5Y1hhDD}STs5d9Rk=lZgC9zivX0-AoW|y&nd}jC4f7~eCYb&S#$Xh=v`*AcX zffB4qm<`EZW};5+&WpkFbt-u`n0|v^9MSn8TCPcJ+a;6q^MLGp{1YQM`0dCx`i65| zVd{z{V?93(FOZaotMw3Ks~4FIHIp*iQZ_~f+9S0criKF;M=+!h1sJ)LWqfUl1oBUu zrZ&^~X~S;!g_IcpAIbR38-W^4pM#Ck(;5*Kl2}v|`TYZwWEV)?-Qgr8jmDzO{#jsKCD(A83IlKGFsG#pEz2j}{sGx#Q$i_ou$tZWv4y1e- zBlVlgbU+RpC( zkgePVq(*#!x?P{(jQ|cbp7HR!5Y8E^*a>;b3i;h2>A2yJ??OGJ*`V~z15FvoKQ2F_ z+t*~l4eU0zNmjsf^66ks@O&e$f$E^bjtBY|JLO(m#nO*MA_jb>g^V!4thk!eQ(z=< z==yNHH4RkhuA`%uAWuQQoWhgC>^UrFGti1pe_c%9;umAPl^2Kp%Wqb!Vj4D3BO0?Q zEY)IqDpnc(4d>-j0e=O71n8nqQGU&={o)wR zm3)j^2ZYps2VeQ^K`K7n4;Q=+EbZsvp7hBC$tT-ZG1SXoHxUdVe)Ro$Wulz~NH~hc zrX$=dtI&R4F$H8eH`^lZO4d_4ZH4TSh`LDs-X1iGOiv-4zFUJRrSVH~*GKoG$dyn4-`JfSfR|n#EWiQsk`$KgzoG9Z0lOATP5-%V@N)=G4|M#XDK`;nwjlsWHd8%v@HiE> zjh8(#0l5@_6x>ntp2plqNA~6yB%Jh^lx{D@RW}(Cn77rV193~5{`=ESJ0k}CZ@3{| zr^GqJep9zbaZj+J%JBt!^?$3?{Oui*r3BNgAz|ySpyQl2)g#h6yk-e{Qq|v2Oz}Yp zqOm!v3P?hC6P3#|Da76L-!ab_-b$Uty?7>#82h|nmj9P@j#UN&E%q!nT}0_ z_YZLhdeZVMGi@T&`g&@e`|-rE}F+TS`XA zwnLKHD55}Tcm0c5665>ozWUlJ^C_k{8~R+r2WJ)q@(X}4z{2JpS3?Iv0DRsMpz{90 zwXTx@awP!1bt9s9T6!*Kn*W$+QZ)nK@lrCiTO2#=mF>In#siWBYJtD4Fhg|%^R0}a zj;DCpy9EMSfJlRTS4s;6Z(jjxZ1{M#Z$cuK%9Fg$*VrF8IB+hZ78j(z;fjO4vh_j; zMS$2oGiC;7or+ZSA**SZ9a^Xnl4I~3Im&M-*V-SEso9c<->sbFMuh>fV&EffWh}FW zy~>p9yR9|0UVfV#6%QB{$J;2{`b+E|9#?y_VTY^yNmatWU)aza5xA-URqhIO2Q=Y F{{a-d;-mlo literal 0 HcmV?d00001 diff --git a/contrib/!frameworks/react/packages.el b/contrib/!frameworks/react/packages.el new file mode 100644 index 000000000..8409baf8f --- /dev/null +++ b/contrib/!frameworks/react/packages.el @@ -0,0 +1,68 @@ +;;; packages.el --- react Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2015 Sylvain Benner +;; Copyright (c) 2014-2015 Andrea Moretti & Contributors +;; +;; Author: Andrea Moretti +;; URL: https://github.com/axyz +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; List of all packages to install and/or initialize. Built-in packages +;; which require an initialization must be listed explicitly in the list. +(setq react-packages + '( + web-mode + js2-mode + flycheck + tern-mode + )) + +;; List of packages to exclude. +(setq react-excluded-packages '()) + +;; For each package, define a function react/init- +;; +(defun react/post-init-flycheck () + (with-eval-after-load 'flycheck + ;; use eslint with web-mode for jsx files + (flycheck-add-mode 'javascript-eslint 'web-mode) + (flycheck-add-mode 'javascript-eslint 'js2-mode) + ;; (setq flycheck-check-syntax-automatically '(save new-line mode-enabled)) + + ;; disable jshint since we prefer eslint checking + (setq-default flycheck-disabled-checkers + (append flycheck-disabled-checkers + '(javascript-jshint))) + + ;; disable json-jsonlist checking for json files + (setq-default flycheck-disabled-checkers + (append flycheck-disabled-checkers + '(json-jsonlist))))) + +(defun react/post-init-web-mode () + (add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.react.js\\'" . web-mode)) + + (add-hook 'web-mode-hook + (lambda () + (when (or (equal web-mode-content-type "jsx") + (equal web-mode-content-type "javascript")) + (web-mode-set-content-type "jsx") + (add-to-list 'company-backends 'company-tern) + (js2-minor-mode) + (tern-mode)))) + + (with-eval-after-load 'web-mode + (defadvice web-mode-highlight-part (around tweak-jsx activate) + (if (equal web-mode-content-type "jsx") + (let ((web-mode-enable-part-face nil)) + ad-do-it) + ad-do-it)))) + +;; +;; Often the body of an initialize function uses `use-package' +;; For more info on `use-package', see readme: +;; https://github.com/jwiegley/use-package