From d79b8ed6340558664f905b1bb37b99b27505aac7 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Mon, 30 Oct 2023 08:14:50 +0200 Subject: [PATCH 01/19] added doc-generator --- Cargo.toml | 2 + tooling/doc_generator/Cargo.toml | 10 + tooling/doc_generator/Readme.md | 31 ++ .../doc_generator/Screenshots/Code_page.png | Bin 0 -> 110021 bytes .../Screenshots/Function_page.png | Bin 0 -> 27905 bytes .../doc_generator/Screenshots/Main_page.png | Bin 0 -> 110602 bytes .../doc_generator/Screenshots/Search_page.png | Bin 0 -> 36607 bytes .../doc_generator/Screenshots/Struct_page.png | Bin 0 -> 141415 bytes .../doc_generator/Screenshots/Trait_page.png | Bin 0 -> 188979 bytes tooling/doc_generator/Screenshots/search.png | Bin 0 -> 26120 bytes .../input_files/another_module.nr | 12 + .../input_files/function_example.nr | 7 + tooling/doc_generator/input_files/prog.nr | 244 +++++++++++ .../input_files/struct_example.nr | 5 + tooling/doc_generator/src/getters.rs | 398 ++++++++++++++++++ tooling/doc_generator/src/main.rs | 53 +++ tooling/doc_generator/src/output.rs | 255 +++++++++++ tooling/doc_generator/src/pages_generation.rs | 277 ++++++++++++ tooling/doc_generator/src/tests.rs | 46 ++ .../templates/code_template.html | 54 +++ .../doc_generator/templates/doc_template.html | 225 ++++++++++ .../templates/func_template.html | 83 ++++ .../templates/search_results_template.html | 140 ++++++ .../templates/struct_template.html | 111 +++++ .../templates/trait_template.html | 131 ++++++ 25 files changed, 2084 insertions(+) create mode 100644 tooling/doc_generator/Cargo.toml create mode 100644 tooling/doc_generator/Readme.md create mode 100644 tooling/doc_generator/Screenshots/Code_page.png create mode 100644 tooling/doc_generator/Screenshots/Function_page.png create mode 100644 tooling/doc_generator/Screenshots/Main_page.png create mode 100644 tooling/doc_generator/Screenshots/Search_page.png create mode 100644 tooling/doc_generator/Screenshots/Struct_page.png create mode 100644 tooling/doc_generator/Screenshots/Trait_page.png create mode 100644 tooling/doc_generator/Screenshots/search.png create mode 100644 tooling/doc_generator/input_files/another_module.nr create mode 100644 tooling/doc_generator/input_files/function_example.nr create mode 100644 tooling/doc_generator/input_files/prog.nr create mode 100644 tooling/doc_generator/input_files/struct_example.nr create mode 100644 tooling/doc_generator/src/getters.rs create mode 100644 tooling/doc_generator/src/main.rs create mode 100644 tooling/doc_generator/src/output.rs create mode 100644 tooling/doc_generator/src/pages_generation.rs create mode 100644 tooling/doc_generator/src/tests.rs create mode 100644 tooling/doc_generator/templates/code_template.html create mode 100644 tooling/doc_generator/templates/doc_template.html create mode 100644 tooling/doc_generator/templates/func_template.html create mode 100644 tooling/doc_generator/templates/search_results_template.html create mode 100644 tooling/doc_generator/templates/struct_template.html create mode 100644 tooling/doc_generator/templates/trait_template.html diff --git a/Cargo.toml b/Cargo.toml index 78b15287060..b01357c9555 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ members = [ "tooling/bb_abstraction_leaks", "tooling/lsp", "tooling/debugger", + "tooling/doc_generator", "tooling/nargo", "tooling/nargo_fmt", "tooling/nargo_cli", @@ -56,6 +57,7 @@ nargo_cli = { path = "tooling/nargo_cli" } nargo_toml = { path = "tooling/nargo_toml" } noir_lsp = { path = "tooling/lsp" } noir_debugger = { path = "tooling/debugger" } +doc_generator ={ path = "tooling/doc_generator"} noirc_abi = { path = "tooling/noirc_abi" } bb_abstraction_leaks = { path = "tooling/bb_abstraction_leaks" } noirc_driver = { path = "compiler/noirc_driver" } diff --git a/tooling/doc_generator/Cargo.toml b/tooling/doc_generator/Cargo.toml new file mode 100644 index 00000000000..72346a37b8a --- /dev/null +++ b/tooling/doc_generator/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "doc-generator" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +askama = "0.12" +noirc_frontend = {git = "https://github.com/Sakapoi/noir_fork.git", branch = "doc_comments"} \ No newline at end of file diff --git a/tooling/doc_generator/Readme.md b/tooling/doc_generator/Readme.md new file mode 100644 index 00000000000..c5a9ce011a8 --- /dev/null +++ b/tooling/doc_generator/Readme.md @@ -0,0 +1,31 @@ +# Noir doc generator + +## General information + +This program generates the documentation files for the Noir language. The input files with Noir code are placed in the `input_files` folder. When you run the program with `cargo run`, the documentation files in the `generated_doc` folder are generated. + +## Screenshots + +### Main page + +![mainpage](Screenshots/Main_page.png) + +### Code page + +![codepage](Screenshots/Code_page.png) + +### Function page + +![functionpage](Screenshots/Function_page.png) + +### Structure page + +![structpage](Screenshots/Struct_page.png) + +### Trait page + +![traitpage](Screenshots/Trait_page.png) + +### Search page + +![searchpage](Screenshots/Search_page.png) \ No newline at end of file diff --git a/tooling/doc_generator/Screenshots/Code_page.png b/tooling/doc_generator/Screenshots/Code_page.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8b4fe40b71b81d2292e6a061c4d35ee95fa200 GIT binary patch literal 110021 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

mw@dxO;J>NjZA zY4-O5g@M4nTKgoA-YS37+=|#D1uJAlPW`cr=UD6w3dv7l}sdRyJcoArV5Vc>35qxIK6vz;O_O{_U9X1jEoJ^lf_Wy4)55~6QhQs z#2GK{{A4EIe}g>|Qg8P*IS};p>~gNfg|ro3!^W5%$=Un0CtD{w92_B6p5LIiXT@z| z=(>{Dp4~Swn`um2=y*8*2pglfIdI7N{zP1eF4x1cyu;SYGC?;<3Ym5@ZgZc(uVtRf zr%GRgL;8T5MlxY3DK{>gIS?v;Y(G&710|%3@~&H$hFJvu0ypG*;w%qD=v!}- z8wP_J!WowOld0DiIgKZ>g~poeoB&JxA+<}_7ZQc`2CnydA4{Ic3R=_EujoR!7zKe-Qtrdvdz_WpwY$5 z?=G{{{|jHrmxY-&c%t?#U5}S%3@GbNtv~MzSP4~DV~#LjLFI$tE(PmNOFtJWZf^TT z!80BD`X&BBgkfNRx%#Dn^`_HAqLU*j4a|)-_)fMMu$AXi%pGi?JYsd7kA4Gof5zz) z=X3J$^hU~2b^tV;8SG<U~GbX)zeu zKp`@8;v?q0TVM!3O`I{nWIF*IG1GN;%)M4qrF-_~%|&HC-S+{f^fIcpJUh>Alz;qR NK}H!^{P@M&{{!{6tOo!9 literal 0 HcmV?d00001 diff --git a/tooling/doc_generator/Screenshots/Function_page.png b/tooling/doc_generator/Screenshots/Function_page.png new file mode 100644 index 0000000000000000000000000000000000000000..32d989c0dafe1ade797ff01b742f80b1788f6dbc GIT binary patch literal 27905 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 PbY*o2sjOrg!D# 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 VcV$mu**1_9JYD@<);T3K0RZ#DCu0Br literal 0 HcmV?d00001 diff --git a/tooling/doc_generator/Screenshots/Search_page.png b/tooling/doc_generator/Screenshots/Search_page.png new file mode 100644 index 0000000000000000000000000000000000000000..e70193c8689f61d472e8df2a5a206fd2ccae243d GIT binary patch literal 36607 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 z zbu8Kxw}fGpy&qLAI?@1z?;o5c?ejYgnN=T0fF@jy+c|ztvR{sL6<`RVgL1jy#uc0@ zpg0r_kBy5GoDzlysLKFc4^1?TQ_Rlg;YQ2*#VppdtDcpH`N9opvho9 zl#mD6IC$>mIZbs_fC*(zh|7IQGUt9Wg?(#hhoFFbW&=IGy?r)}a>B8~s^^*M6l%Xt znA}%w5f-bir{6r$sqGmXE9=ZPab$g(SnhZT)lna)^6waz+oF#R^j=dmQCkj-ay_)n zCX6Q)84pUmrp{-utXekQmYNcY-tu6s?U>PSTih`Q7VKotZ#NsbHD-Yc-xvs@IYR zxG@-56E*E=)AOv^(15@ES@p(-R+$V6}mvw=gel4#mG#$JlX36gm74F zP-#zxanrM5?bL^oKA5S+iR=adOxo6b>UcQh{pKes^1!HAmPB_hvB5^h6 zteVW3NP=TgLDA(HWAoSfDMup_Uriwrhv=sSK(;W3(`z$|s$wwUDC#$k*>D}I<$j51 zx6M}%Zg1I1x>Du15)|{hyDH=*rQ{Jn0UpSjdK9n$Afh_9eMUOFF%3KNYGG8<{0umI zdn?+yYP?B?cx}aKv>H8^R+@E=IEF3Wt-X{k&^_ZF=0<+8|Ds@q=^@aPKZY^i?E&SG z=}6+ii80K(-V15#4e{bEHAJEL)7NXb>v;oZfKU98SHNbVjk+=b^yMq<;I}&U@C@3_ zc4w}Hm~rQf2S{GZ{S8K1P3g#fk80}=YPMWA+~@kyYA0VrVeQ+uue**n9a%g#T`{9| z*4X#W!AV2m)feV;K2oE=jEBVPbl<*eTVK1$#^^a9+@ln5Vx9eux z^VZ#VNGpfSOv_ah6XTFCs4CW4;BVFHM{1G`$6vuD$gdG*+u=8zBx;XSlNy$Pkf@RMXUP=L7PR75w=DFg2HR5LR zkO)Mm^Y2e+skX@2#h5RJonC!a`}~=n zP9;k2+Qmnjx!k4I7G9NEmrhTOf$B*eFO7W|QF=~!8xSj!Eew};TdP}@t40xZEEQHi zoPw&kw)-y6Vk=y^1c2Xyn_hLFcCV(hVmO_?R;?s31LLWq`p(F52M?qNbN{^QTe9=^ zISDuOP(|+|)C6&Kf7pJ(VC|66=!WOI7cilp7ii^yQ8h11<-jAGZ`vYXTDiH+|8`!0 zcA~R2woM|%xj-TD*&Hv0RJRvlb@XLhlic9pdh>o(!}~3_>!(=r)=V-%OYEb;bq2T)Wo+mFD6s zE^Xv_%AkQb*x!x-cuk=${y2N5%Fx}BLS4M3#`4n!ms`rjf=lYX#gj8Y%}2M+3>}zo zyYBbe8jFotH(QL~TAcmPlZ{;kEUYetw+>V@6sZXJyt!y`%BtC`IxIzEuUJ5oM|s*j}t!-gI$Szia0GU=k0A9IlnWk6gE z-PKdz=s~s=0IB=9fqH&R&kA{JGj1 z`v{FKlGk>;gGUvm{FIL!lzVV3y<2?a1YM^EVcECA^u%ReVtZN-YZTlhHvYi#t4BNW z+T89WK6Ogt@Y#Ie*o!rj9zXPt2(*7j+xo;(eS8#=|$-giU& zj{=ME#`c!r58-i-N){Un386yv@fOlAhm*}=>s{*W0V{nfP2c9KeB)mc*U$bf(@Wy7 z1g~bkzg`*s{q$cJ?R&TEnI@j^!{Kip4ibu^+dMo1fw%wo-ROG<^ZfSR41L>s>bv>< zzA6FcK-1)kI0X^Wcz zGRT04dyKWSv-1OmG52q~_{uw~`@}e`9L2yetA=@;{YWoU#Fgb{A)78SB3`mEHPS z>u>d-@FiYIXQA@FYTOX+)^b`*Bi1zLqR(69^+qL$hSZtY1oYy!l;Kb-|FWi zz{^oHgZ^ZdhIni^FcMZzcvm=R>aZ^7Lm|;uLqpYuP5L(&q~t+ys3S? zMfkO~vC(ho6pv3c4E+;jI-}M7t_e-G2($)q9tiHASF?(rN>@TAsO|)H> rsJ!>p3y3`A;W_T4Ant(DspI}g4EjMSLuF=Suk`kH{XYt|?mzh-x6-5T literal 0 HcmV?d00001 diff --git a/tooling/doc_generator/Screenshots/Struct_page.png b/tooling/doc_generator/Screenshots/Struct_page.png new file mode 100644 index 0000000000000000000000000000000000000000..ab095bca7007cd99c326409714e1252bb78c2a5e GIT binary patch literal 141415 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

!!*?uaj__|FfcH1m6hbQF)$vgVqo0I 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�PnBsxp6qW)<9!BS3KGq!qb-vKGnz|@mIlrNV!jFEo4 z#G3-_o8XZ<)`SQNSs|I6&*7r+L5_a*{ZY=A`MlbN@JThd&!>k31V{LkyLZ7c)5#go zNB~CD&@jAK>7a~m>zbKkziD(eeW;RJ_8g z6I*WLHHucEsgFJE`O zB~57PCroc*GrF2;CbnmpiXtb0acx`{Zd%H6i?oE*uEF)V1l9LBr@sXZ@E?BF2K)3R zTkFtYHIvl-=RXw%fd2^23raRVM>Em)J(iMFZ2Rj1k?-gUFu(KgV8z;bUpnN3Xy&WF z-y?7s@x(XeKG-z|La|1%wB^kiBgDj2X}8tAhu_d8 zxvzJ328Qldb+H{|?{e4u;rgf(E=u?adGDO~!9ZtWXD8S+I2dQPa?g>Uu&=AL=80UkIQY4_xqBzA z@QJu5mJJBy)e)$hyfNAOZ>Ro=>y`1(|^QYuxm@~_E0 z-5xHp14{(9m`iR&&|#aJCC8W46%;t_sjtf{Kw45iH3oe)fZrHp;%i2k&s`paqaAtUX36U9-hR1i4;R$I^ekdV|^fr+G z^c-1;3cagnpcn@lwR`JdZ`Tf!cS!w=NVFp=`5wO}ti!ioa5B}>qgP>*)2ag9U+W%B z++FLb4~?9BWcXC7t$$Vj?SkRHU|UX(78``w>*~F`D;BwJ3oC8kB_+u&!LGS|Ir zsR_i*DurBjx6%X&g=C=olo}I3M}S$0jmsZmFYPq*)fuTvVzTs!7v7a#9#0}zEfU;y z%(qKhQEE>U$Z5%IdELl{S_d+k3%<=WDHU_T2tXP8%4gW5G(Q+v*kV_ctN*uYOYY2( zq%1~u28Hg~U4sM&?(PmD5ZqmZySs-#2q8#t z7~I|6-Q8i3;LhMK-|Sbj->>SNIzP`Js-}vWS+k^j_0@Oxvm>KoY^>sHSx~K8sxvNm ztmS&>s_jj%k;z!+IZ@i#RX5t-F{d#!Gs{l1o?9grxiX2>C28x8XwBTr6V}?tyatw# zc;(M2EDE}inHG_t3{N5L>TB85>{eJCX-adZVxwbovJyo#D0?C{3tM(ZIVk&3G@>d; z&V429PtzRD^kJimE}zK#=se@&zo-9qN4_vkYrbiLV!jJzx@>2#hhR7eA$R07vEjpv ziox1PuRLxFf6dl|!(mljf0k1p(Aog#n{{+&$p_^s_)2KO$Bd3XVq2Re@XNCn) zGuQ&J(Rs>#=Od*wW)3koQX_54Iwb31&Md74<6gUcVRQ!eU!2( z8L*PI0f8FKPt{61 z1yatfNJsQFbsj=$vX;(X?gtG&1Y4BgiR|ufPXK}0JZ;4*syh|uI2OSe;t22m`Dd+L z^2eDqs@8XOZo>gYn+D^hTa<|=Ql?7k zavdY`S@6<;gP#ed!DHidZ=FEZcFjTs?fSqp%dSmVBRs*^+x8J_EdlHMrwL~}1qQ>o zAdfZQV~3iAmS|c=3Dw7A6j9X~9UmQCMw#$Cl;y&E+&wlKQr^+79xUR3;+3l8aJ>h|y|#dT?wL zW!4QO?@JWV!ve_ay>tC%a4eiB!Jq_!fXpu%C}8a0rBQjc!)=Rq3w(KqqSaG5;A=MG zf3GlPddfy1i`k+)$^^tI)H`c!uYg?Ag~7R!Gy%W;ZbXm z^S5s}6gf|nsa<(%Y6(ZbSUzk%`Zk_q+nFS*eGn8(uYd~F@QIrc)NzLsLl2$N^uhu# zx*t%I3Z)criTT8x@nc=a$E#S~B&a@#h2+QZuOt$Drx&?j(?*pRc2r7!TF&UGy~?C; zq%w8j7(9Y~J0kiKgL8H=_-z z#F)hk-P3EnGU;re!50|d(1*pKtegAXklfl99+lUfeuDEEYM=7JPGJwv1~^^V^+}AG zipKYe`P(UZC-kJWith1Bmnf&Eia%1#x1w$^RMlAGOI}?1nUes)4@!g}vKE2?VZ-eK z6*{W6J*l&H$rDt?q4=x5K#Pj6OSNYUBM33s4OLISs_qoyWvDCf)Qk_6*aIj!9SWqO z5n}4mAF^jc?pU|@@GnoYrJ=twFE>4>&9^OW2qrT468-j=R-+Mfor>HL_2tK3s}q0U zt3jvFNI4%E@sJO zAO6l)1}2c1PB+4Zh>qdie<$rdAW-Dx4hBFX=sEcU>9bQ0)fwP-(O)pmqlU)vAFJ`# zk)vYm4*&1BV2BgpN_t}c@gJ5s-3Whshn?D;N6{o4Ppa+yP?SF6A4W(RZFJ+~ANw^c z0*RvakJs;Ol|KjL|1rp5Zu*~RwGVR$AVP#1q&i=+oGzGUV6+17*YMhV|DRmLkn%?{)yo(O_IhJ%jHlqhd&nt zHXmvOe9JVo>U4xTw_Q)2T5cP^dd%IMEDHs&;H%C%a&b{r+8vheO0Jea+nnnDF~ySu zruU1uTHkI~87;SCU=*DR;uUv&XH!^~MimXdb+V`uSC#+pV(t}U!Rmfl_Aaj`9KPM^ zTOI1A^F9zWCR1_5$X)W8FV!Ag%^UDPUwXC1hWcZLYmrEqDhqs1E{4&367z+B5qIwhy;+fpVjT+JlqHaZVW0WOi`a|^1o^%V#`5R<(8tjM*7mDV5Z8D)i|X9WX#v)urSTAsV@$Y6QG2lx zo-V^>xzE{w6D{+__uZj0Y|v@lMqZymnEd|5aWgK>GvS;xaxjfMW;QNSVdnE>ZF9)J z)^*_@a}@ldBE0G1Nu)mgt_dT|aBI$H$Qj$H1m~HXkGnFdP{zqnatj;U|M2T7J^ZS#+i7$wM+6_B7Qnva9F%C|EXhHle&J69giu}hSjwfmW zV3VWeBu4Lz{fjo7d#KBMkz4S)dFG%(w`hISP#H^k)Ic)t#wr|qPe}N6XFFqsj$?u? zO@IJtT$dsR10XBYhjrDFM(WJABE%3~vV{e7QZL`g6+usq&|jA7DaSupv7rL2;h$>I zM4yM>iBxMIY*(Xjv3k^AKA$r0WD;GRdhb*kA+cN9GEgEh*6f zgcyD-v&$Uar&)l&#ctLB98wI+>LeiGrft6Bq9 zN(E7Rw$P9J@|j=2C*O3|rsOOUmwx-R@T?tUo?J8B`q(oGWrGxvZ(k_Obo|se-2OBj zh7+Mb&g`#48p3@8@?iq`iFc%xbQF}qkkl6K&@Jvx*nV5j1G5ZMSY9m{8Z2^x$B!tV z^C6LM^P~TTEjf?Ax<6)HRPR}0s@PNw9r)aI4m#6nTZwlbwGvd8jvpeBYlrPxyS>X? zxj5@1cJAJG(|y=7iY?E_ML05%fK-jguXh5%Cj^azO36Y+VH{B+>^r81$?7nAa%p;M z1;rY8@nZ0GzBO#pj(m6372lmS^p)_(-f9+kG@jBIGz0T2x`J^z^Ncupv$KdnKX`Ey zpQ9?1Eaw@58w3EiJvsdel04qmO{JK9N(9-ASDj8LehE_C6%X1NXd9`FgGPW@kj@-{ ze@s#A4BLJm({69@*zLc7OX$MB#WyHq2j&Du$xLpiwo{DX6sCR484Tdxjf|Hvjh;WS#fvP4Zq{K_`PYCf)NvvETN016QyrhS1R{~c z>(hf1A$?Av0ymdC2IYWs9Ib+ImzJA5)o;LfC!)GduLheaGS8qQ8gM@K^2Gav7YS5A z%FelvxUrDHo(zias=tfnUU>uf=RK??xXtc@A?ldEbW_r(Qv6j$cowb^>0*KTmWlxI zTY9w3Ld9Pyk;{0|`k#J1VFY*L%4_{r5&EA?n-z8H@Oo!@p7D}yhR)WWvF7pKj?>(q ze)Mg7%sKD4x~u*|hU8M(#*cEIALo|&81Hto6&I9^xW-W>OPb3&7$Z)$v(@!0Ce(_X z%a0;5d~YbUdw9lHGK!y?F6xLxWFl2nBkK2X6qfQx*PG`Z3hE*z3bHk8mRw5r%paHQ zuGtyvkZ}y^i5+H-b~V$QI-M7aZCG5zs9Hy2{fmygO%C5~H7!kEKm62#bPKJZxj!+1 ztJ6`6K(E;dEnz9txhqn02pAqItyLc`&!$L>sw4h*`R^ux@^QmZ9iV z_1i@EP}zK;rs`y5MxQB9u8ulVs>h7yC0rq+CaVn`>q zqBHK}D5%gPs;WKXkYmB~G{{MWYrBZfj0+_0Ct047VKIGJ5Bwm&H}uj3SqBGs;1hkR zx2a~hPXO}3mpf;(Pc9>K3|G50eGlCG~eQHsK9Xy6LOS7oOQf35%njGISQMbZ1^ z9e!e@bVP5jhP$-S){!Z{(>5(xJ(pP=ySFO{0iCgO(Hl+Q}Hzt~%>fdciUn-AxOWzlXB$?M&_zE)=LABEdsCO)xPY^hay14l4se*tP}Uc%!rSSXfJNbb|) zn{$X56cum$6<%rN4SIMtNx_k8IUFDpk0s1r0fV=}v#1nm_B7JxRzPHR3;iAL$0(6= z&wFoMn<|bkd>Ci84c#O41w12L&*PI7`4ze?L*8tf{#Chw88m(G#eT0cGec(FaRR*k zv?io*``vImbxoJ+j&FZu3pE|>0UdeMx4lV>YpmsVZZ}ityI1H+kdz}BeJ34?b0lml z`>00vTu$lg`=+K>*)_tfb50NtKjeMGEwCD{ZZSGq1&UMN23qi~$GZuF2Gw{DL$5v; zuL#am4_JAzbNlvs)Af>7RK!%>->auNh&`Mi?n5(g9cg)Ve?}s7f4)Q+m^Z8L?tb4? zqw;Li=Z`)y zK*(-$D5kW!d+=ET?A5I;UljQ0YmPb)2Mb*_aj}v2e;0LJ@U~wEC}M3mfL7>qbe?H9 zL>Qahuik)}hznQW-9~=j{Jy_zi|tSZD5EHeXF(kIZ>Ti<`LtZleR$hlK#}a`pZhP@ zc6IJINW69>M(r4|ag>aVW-eTC?3D`QGmjh7j6$DIm;11AE!p3bnlycF?Yl@a$m6Q- zuXGECU{uVZMVovU4B_BS<3^BrBBj-CebW`ONC@0 zF)ySdAnrJ{8dZORNcBsZ-cysXOP3hw5VxzoX7=&8V;|?oTIJ`mG1tOikLk$I>7YJH zJ*$O*VQ#w6#&70^F`_Z}HGUhgS(__GCpug;bp6k`!gcZ>faot* za=qtN9*cIHt#?g0pr1Y!aIvH) z$8`#S3_pGCoFu@OhYvF<>T2G;`!#Z5X!2-zJooYZHFXh}TXRWB$5--gv$BT#f<@kD-Cg=+<9a)SMg601LjBs|U*u##h7Jd^ z+@bSaplb1qfqQ+Eyl)Us+YK2W=w4z`#*^lxsmYbT-N{t`HqrXVB~k#BMaW?W8EgjQ z>voW!tLtW-|LkLc2d!&q=pUl1+XA{BQF#icL|JR)X-BO6J^=P72uLdn83ktwrmTMl< zW0~d6gAEXM)e)P?EE=rVX=e^whqAPW*M`Z*&%bQKuWf9K1J;X0nMT7&us=ar9J`Z4 zr+_h}JO~%Qt&z$H40VS8Y~+dSAoT-oFV+jkV)6K?sfL{!H+EpG!DSAG^+4Slk+-du zqR2M^zdtLH5tCc+jN3q4wweiXn&CYN;s8YPXDp-{(ug?{758v%0KYnPp@Yto#@+;F zw}1><>LS3fW(^L|fbQjw)+umIO*L~gKdw2x0RY)iOM!y$#XxOTM*pjkG;N1ywTK5kVdl|d0YbNx`?(Vw36?(ZWt7xEaCNi zN^=2wk4lDg#CH;V#=bWsRJ}05AlDRMEoGa}%5VVrH_dCXo{t~p-ZG|QbzQN+0v2sE zEK}f$88tJ8vwjHzEJd%{0E?W4q%;B|q&o9CU1VQATa+U;6+I{CK7VpORALet4#$?W z>Mj@lBvBr(9zqPyoE;_Pq25)ZQ_P&BR)9gkxLo)uQQV zxQM!Iv~QE2{;dV@xpOA>uMgaetDtHb8QkFpbq9m z8=e*PL1VUAPD6(`irT~_`!aDzj%gg2S|~hBS)M0L$#Ba36b-w}A1fi26+yW!zF0vbZOdhqvavdp_O6sVCc`YWk6C*S(B1Y0 z@y@t`(11!-g#loqkDsaCEq-wn{>ei1FJ!VboF)6Mc5hOm-zBmQE6cRa&-ppN_`l#i zH-W*`AY12h*T?$Byb-5^sYcJ(@QfOu2ITDcH2+lajydx~{Sp^i|2D$5OlNh)f(8(H zxN2>4n|h#-!gk;EFK1Kx#kUs$462zNHDBgWA=dplGHNzRQzc0C5x)8bY!9kiK zbMAy$A7yD+V~M$on<&62h41x6lbe;Ngp}dUrqj-kC{D-TX>!hI7wPJk5|J(f-_DW`u3h=$N4Kb!BuigU^KLZfDEHtIn>re4w7mb1u0g zZ=8NoKGwX%O}N@5>%o1}u>(y>HZtEl;R-6P{>reV?);-I%6Y6e39F9 z+|qK9nRvtgWEAG6jmN&vd#}k%w2~ITih1J_)KT0IG?&LalmZ>2I#Trsl|p5M@|C)3 zJ7LTF0r1!VVhhjlc7+HmO4A?dcn|RcDH)B3P^50y+5!@g9%Ebs-YHOfv((BaWqZi} zTFqx+pzCW$*6!~S3H8nZE`1aBPQci zbE<5sR9+N20_L$FRw&so73b*S!_M*BdA>muq5QeiFAYUBJa*PZ}K8Tg!b-TvZE-OcfxdZ9;ggTblZK}ZjEOdohPC>IzIny z`j*T-!35sVF^|44uOFV1DngYSNM!JP5eo?tfr^HI2 zXQ&KN({vu5Je<>d(RwIkzo!s-pKwZ*=zzwl_xrhERh%Zv%5|Szs&!B?U4A>iWSAxU z_Sf5&m>iv`W7Lq-M_6HLPIY6}m_=yOX(i?>{rn|nm1diFHrSQqCr|jwYiD`+#6;(N zy9fZ(X5U|8&HoDGY*)UD6eT#NUaHbfQY{U!VaJ==hC;1RXc&+@b*1 z=DHo0Mj9TAngNtsM=lY}1KtD|3_t<&e3p_uYx_Kir*po_6!`kq#;VTSf&J=(bbAG@ zq6CBndniwjOSARu3Q}wX_P*HsTCIgLNu%j;@*m`oR3+`CkaPRTQkfr=Q%p?!yqWBDPHI zFA&;12;IoKjXnRFfXj+NclleMZ{I{m5e@w66EOEDK74;=@c){!yB4EpJzUKMx*(<+&XS6f9I}-;e#78xqc12%eZlZ;J3sP4((JJfP53r!O82@ zOzi!&9#25?t!gM}tSQx}HB5?7l<778x3NC+`~k^W(NRe)_dC~&QJ|iLblSPMlwQV7 z)W{Ko*+(Wj*b^u7l^F{Vn}L1#bM-KUwOuD@Ka*3j8~2xPrSMeATnd~&>|l8y zXF304;kkTF<2<20^2qwX4017r=AQm0Z+>i}BDcs?p*gj5WUMLp@?#Ggm;ILQaLd5X z8p{vEy#)>w*;%Yd{j3ZwK;bi4^Y~lM-Bngwx5u%pcV^B}XZ1Y!AHg=UhJAzO-Sqab zWeis=J1};EC7HXe&ughj0G*fI5g*6{CC=)9>XfZs-a1#+{fth*TD*OU{TK0lg@67l zLHshaUUU4u|90k)xmO~`z@hcThkj$#_vs#PPLzC+x=2nVzJh_(ipV_)BZ~k+;y!X9c-~W`lSONbqsQF$Kka0i5zV%quc>!(Aws zfNR{JsV@+Wx@_r*Zz#P4S=*UV;Y#CeO`kd*>@2egxO~|uC%F2MGiK|V9AEzi>4?@< ztbdDFbIMIWfY8k28$c$-kCBdFr;;Dkj6{bC7m6UvvbOk*O4(>F-$d@* z33sTwIXR3&fQh#m6Y$Bp)Ez<)pCdBeAOtZYxyZNA@$4_6OFu_Maxau_-V*drQM81W@ zYlhe_Ih)(h)-SDO$F~LPffscnZoD{x*jE?!=K?*hs9aqFeN#qfwT8cghYYy@fi%fv zVE0S=1tr!?lwrfBRu3*qNa!>P5fufaOtbF&8{uhvD&wMWP7q;eylGrb1^KKNvg=5$ zR5_k+9teZq1>WZZh3r3fkP$1=O1>#tM=lTXHQ?HD`sNQex!tSW0K{MM2|l;FOeItw z_uavr*x`z?1eNK?Q`vDt2kt6vp?lH^Hm7ctD z-jm!PEx8jZJhL8|4l{kh_}^fiI&^uHV}Sol%sR@nNx&Z8{Ppi2!tG4aUcW32Ll^n79Lpx)b1=hz)N)8(y zZI<0(Su7MAj}Op$c%BW9mg3xUTJ}rC3BZx>KGe8?q!~cwO@!{#iwB_0b&SCq7N4P) z@<*|ClP`)#hCg9`nG~%aa%**ETo@1tID7Gbss?1T64P%G1k`R z@>G9?*t$u%Yb?Aw8uTcy4f7XBJN58y9w6nX|3MP4S=EJkA~q_pjVBo76F_^5Vzdk< zWP%RlE`YL3#=PAw{p?n|?8?YX-j|N4(X-HESrRiLWH61&U>|1ff6=JftP$-153=B` zXO6|i8^<&Blp1ddX!T|t{q@ZvIyVK``)SJ~?xrTsT|n?Y{2qcJ?N^DdJqFq+vU$my zxk0_U^tF+;stUyJe0*YO!On9Y(T-1ee_f{+lbP&h{nK$mVZV5^G#c$LJqf9u`RFOE z9j$_$)5dMaQawUJ0sLs@u{)6M@7XTaSK57HRig>%xDA4mR==+a83=o$ zA{dj?hdQUNn#9iRzNI(C7ym-2cp}U*?9~(OFG33VEC>a$GC+`1&D-S-V#5t|WQu=y z-z$fM54&gi=r7E0LM$@~UoG{R(EvV>RZ=$gm&fM-P{j9V3-<5C2AFrlV@z0#*a8 z6DP*U@Ua}>_)Vmar97dDpWQE?GQTbzj4&TWS`V9uOfHMaK50t_47o_f0@eY^IUD8&w)-ubpO<_&(`e zNmtuHsm8&q=Qc5wMye^Ty~y3lZSL;3uEhygob5K*UXu=ck$s!%*noYVO9l-?z~MuN zwiS@(8Io0MyXuPx-b}!$&ja>2v&e2h8QyqlEKA5HKg`m(A16X)KBYrPsE^1V?Q)JG z)i_BN+3=_@(2rF(=crj2o4_dNhq5+xns%}lU1)=Hn%DAaaKFRS8I(ZH4E9h*iu+}3 zE*tLR0nl4J;&dllhD&%KA(80dtKOBBkg(jNzx94|`8xU{dV7kL>@C&TQ~h>G*N1g}$~a7zbi6Kl8sBrzw$Q&Pu!Kvwz^h=9VI4yz6R5#zpwuJ*lo<#mn^> z#rNN9!>ho^7V+Qgo2i&5Hp&dP@Dyx34ie0!{WtcTnWc#1EJ6ft60fHt03vS(3H@O= z8m<;GhibyjZ)B#cK6O!AIcb-;`7P~MW~QS%Ug~;}4079hCw(}8Y{=_c3+#qS;z^<4sVK+B|eP@4hFkx`DeZz5D_z1^)$8c{a^FT-sP-mh}-V!VyR!l z#87({^0h;G4uV3d?@ua(anEx?^;SZ!6DVw&J2;1xCkzyM8=mrC^KUDmm<_z|%gP|I z`q_G>WZijtZ6C?1+0J2oPEU)UvP#$TCX+I4Bt`EKf-hCGkE^o{$9r#`Om2yq?OCf; z3*MfBAiNsl-pw^zh}Rw*PX3KA?JSRmHuUK@PJ|9K2?zn1GcwlH1S)vN9vn~ri2__s z)RZ5LB|Aqkckcr8-J`jTyg&12_=trAWt*&su0HiAYcb%KjnfCOTBL3pk2^8b>Al7O zMtJjKW0KV_dTM6K>$vL5FTy`&=H}zuz?GgKI>_Pd089GGYiiLEgvAFTU%p@M#8YUG zLIU#iX8%JN{YRRC@0(a=eywK8KQ7JCSqy)GF1!uebkn8WVmryu;d2v8NXu*bfCdsM zh99LzS{=Xuh%TPgs+8Z@Q)6}H;))wt)Ep?ppYqtTHx>CgysbUg-#2o9u(qIAABj$~Kj5qnK z8>z42@jHjAe4H`x0Mzg8_y8b^49EWH92sr1-4Fh$o`}50&YWP+P79!d&!Eofkz=_G z23}nzG%`R`rv+iZHU=l~;|wQRVD%CLAW**cBw6K+mN061ojdqq>^<6#lNw=Y0AsD6 ztk5-)=!CCd>M;=4-!Hd_*3I0%94lkVE^(XQ%wqTAAhnx>?7~AC3X$K!|Ajwx$yDy}?#iNr%*f*lWkK&up<`mRraodvhmX470UHdoD;SahflJyVS=8v}i{TzOh z9zb>783^J8i;pZ@`bB@&V<>?Y8`a=~6zOZ(<-S1xj+q~jrJ$k$KBZ7Y0rp9XAHtz4 zTYbNBwfKfeTGveS7@jldPsC{Kc8WoZhT4UG^)g{*;;YVoM4svigK@ri9FiW}BQpK8 z74|^F-PtG0(ou)0rU)X{-M#ol`l(0&zlr7}oZRlHOoM|pSj)E}f#6qdiBr^2w!zvV zV#^et^-HNp2T#h%$H1<^;yR1q)elgBs*ukwYp0)kO($9&zQF%OVwUx)Dr_8ld!lV= z&SCdXKGM$5&6N3raM%tV9e?z708MOYQk{O%etw;g8E%q$hmVzY8=_H>I*BGx3ltzT z_B=J*XZND(#mL-anO5afB}L@9O_)RkMn@i0pt<+K%h2{O_l|hX)l%0l@w3jmK*xP6 z+SZD(A=o9vh^Dy!W6f9xDpSeLhH?xtvX|J|*>7-}Ysg53*d{zZ`Cqzqs9hCK1qh|> zZ63oJpZW1nM1u%DD?8j5R>TxX~| z{5$Fw`_)wf~+G}KPICX!D;FTfOM&l>vaHJEUL%joJ9QrMqQ9&m&9Cl9T$ zjkvdjl8nl8VL%`>S5@U=P8*WMT=c%0P=kOH`6zg>^0X!Uq&dzWg)3gM13c>Oktkc+ zs@udILW}VZ=>1zb2{e$=9$cLIFhNnw9{ z{W)i4Ro4~aQT~=c*@A@z-+ejZ*POlTwNEu1CtJawBEES3w=wTq;8W{O%j5<3d`u1< zXs+mtTB*FTwc=)J2egXZqy{6!Gl-50R0b>=jS1`9c0M6d{mH!j+wgP*yv_%gPg&A9 zJ?MwIZ2CyEyDFCU@g-j$FAcam-!L_B%X?)nd(+nZVm2hyM5CPf`Ud=|afOuoPVuMu zTDxX#>6~O7*e`ZW^kTA`wjt8CifFnT2_)^AP0OO`W+L%Vgu_&qMcyhZji2|sP!|wW z8ED5!yfkq2qD_A+JN@j&o4nskw{!HW&Viih-6*p&zt*>brQ#e%*1Ugbg^6#xsE9uL6W88fiM>-lgBYv~qF;Ti!o zIlLZ>b$jt6`%ZCqGkD_j-J_|hg25+u-#rfSXD*Jzgfg9HMHNBP+}WS|VRXRMEs_OZ z02i@5iA`9Rs_$L#{WadTSB)08)wh zA7;oAj=(ii^;Ni0QmW!aR7kUk7(FW!*a&MVfx29 zEcVAdR)#%vpGyJ34b@UGF~d7I+~!Z>B|&1mLuxNUKF%)OKBJtCrMXY1h6rWl$}~B8 z1z1~su48LFhvQHfLMofZPS)u+F3nE_q&jZLKNf}X*4w)I`YunEFh3y|io&zhh>CmG z;+!E=DFg+g?Ikxl*c@q95U=L=3=X5}dIH<3q{9kPOsvAr>g~~BhPRg_?3;_9$h}F! zHdy$qH7%>(;)KRX(1>Y0JS{+@<DEgqnYu`ik8S&zbB6tU#v z-~Obm4}9`-yimwG(?X6^yN^}2@;Sm>_V{v};f|aZoIjN{LJZaE$`H?&Q4>n{LO{>j zwrlcnvL)~Pkf1Ucu8)D;HHce^cf9{Ca_0rpFZG0msjA`Msz>Zr4UV=UanP0_PXf?b4$)cuWbHHb+bL_(tPT^lYAKgFS0nxG2UngsX14`x4w2YMik)^= zZ}L$4R*Yll@@ki;JX*t3I-Me zWyh$Wdv-+mh6!JYZz=JbCnTM5wC<|9f?tXFe5}hF9LVm7h9Hk`c5qWwNJ}0Src)pO zP4w##Ex7-9>Gy%JTPXE88(C@=5tPr7z3-puN~_N<1WqnNOcwGaOh5loo-o-_@pmX2 zwAP{{&Rg8)?|ZbT+=_kZs?<70%>sn4d!62PVjj(nDH(ay`||LWcJy0*yOzoDean=Z zF@+d!;?1@1s1BKnbrAk+SWzeF$pY};ajVR8-!L=k_0Fs4t&?r(tED9A!o>T%zO|Jx zk84k=e?r+89Y_Ndbb#lXQHTh0s~w0Na95$YhOqy%{xDapO}y6=l1Ey)Mk!h0eU@y8 zOiTB?CB=}s@@}X+4(b8F|L4v!6d?Ej*DSP(mCjMJZ#6!}2Y|rECnql3absGq6n*S^8{J*L%{3a19 zym|J`SG)b$TnlbCWXg8>qrBUEynPh$*ALuwoI=YS{sN#o!fDF$-tkWdiXv_hiZs#} zwP)Bm^1yV<`~K9aiLW6XmnLBT=S0!YhYt#SBn>`M0-l;_BKiM>lAKENh{uhsyGSqq zTEr*}AKM#iCYR}xH89>dzWj1cF}aFG>l)@l!Lx&g8~4uYmNOW?uj2Bk@eV#~_d~1h zTP(a#+cN8W(u)&~UAw9JrGs6)a-m&SgxU))v8N4vmb3gAz60lKW}ZEEqSK3i1LnM= z{naQFrmA(^2W`kr7d`uE)O(lYKPY=r;0!{kLv;Bb!fhYS*#$rOHLB3rAL|JEcT1O^ zoYXnLe3AY=x{0zjY91hS5!DlBxS%HzBLp1V&CeF7-deBVQ-bu5;nKFk-UN|Txu`Db zxgV0JwWmUuF5P+*z6TAmh*^z@8HEr2iw+kX2Hncl)KRgvtk~=DhzmnT{wjf@lCV|y z(n!da3AcBTMN48l(54*uqzNO+@M`h(rC-^NUw?^UXibh<#A1QhML5a1ypbwSa3l^K zH}CeYEV|jCwEjdIbY{xU6aUZ@1Y_p^#B zNBQBMg6gKCD}1yb%qr5b{tncZ10Dlk^sP_QdyN+o;>wr5!2HlT{qg_RFFzPDk`|^y z(4>vmy?-4)1Hyt`x5TUyXea*N4YRx-IS(Ag(1)L0E#|5(TZkcKh{#L^k!LuTB8oED zZ^p8V2)A1BHq1IMv97pf)r+Hil@EF2!d^Kx1xxrFVp57{Tl}hA7?-@Y@ZpTJ9Dbj;%_%)o+TNhDU=_GP}Xiz1#re{zExaL zRcW}o?}(>=T;Q!{kjt7#oxPXX59=mIB+PKEFiS?k>wQtFd|R)Z>DkOu)q-=7isBzT zE}|CyOck@)tx1*h=DygDrC0*ril3QsfNf)?qVtr!qgN#@*Ik6sfMS*AYq}jZa#46a z{r!r`TFs7n71*9Q(ZiueupP9}sD|LcQ*;IafT6!vGqTXA`7T4y6{+=m=Bk{7pOsn| z|8ss`1S50ie?fEZ-o`$!Tqd&z~73q*hgh8>vUl`&+QTQ>esQ)?eS+v;z z&4nia$~chV`#6NLXl{LtJnPYPxKpm4z%TfljE$Yyo0`h0$K)W??Q$N%y67GOHtVK| z_T!w(oGttuCjQAqs+?`HCJob(69vUA5OOg9Z>5;ew(h&z8)p!434#fMD6+1v#B?5} z_USwF1|mPD>vPs<#zcNZ3P_2cFVwrNgwLUx!9L8h5q2+0dlb~x7L*FB_Q{#cvuH~V z18+edp8^rbg+o0W`AROh`BAfXO5*w*;`I3G&bhTYiF6(#Y03f1HNjGOV#29BM`_ls zEckxbFE5E4Ltjy<`gpDj*6zyGyzCuiMsSMzLr=c={v}!*-{a-3V|AR^dOGDP)@kc! zl8d>%oBD8yqKPMCI5WsRo4<-PouPPNA3OU6^7SPjd0-Xvpj&#RFX@#`|p>LCOv+#d5rNM0VD;+Y>Smvgrabscc?tDN&zV-afWFYFH&j z<`^J?cei8@>x-Ri57wI5RUKx~o6AQq;di7fCVL-79p-K<{#!vX_6SK-{FSYEH5hub zlBH-4cpRW1Wos$@YHkS#RA4Bg`$l>|{mq1pi}*M8yXW>Zx`gV$2Qthi4GqMgq%vzr zgGC0bH$jyul%Js>+8=<}k}Uv$(6y6o@NO?I0(aA4Hj4NMSJm0rXZ8Jjy)U?Zm z<3CV%0VV_YeX{1$G2PMM0DAGh-M1_ifVp<;$!|Vq&I90V94AVW zTFX6Q7md%B+9BH=e)HCEn5n~&xBqF|H*srmx@|lEhTztESG@d|EWS}?x4jmaC_61= zQ;z+g<2q^m+$SO;$B*`rICOUOJBMop*1GQBL^}gTFYQl4%MR7ku>IMCQPK~ET_3If zsR^>Wo$~n~5l(WN+@j*0tR)x; zXa8x0-j-$~EW7oXwe{1z46D_K--54eOJ!=rY58sdjO8=n#aG_HWE#fZoOQQl;Jc32 zlBwr>HJtYk^@j6aL)@Iw-v%^k3|upK9;{CmA1l6?HE-b1d(~PyW&RoW zv*(s+1eUXI4YqQYKB^>Q^-`S*p{(8cs$m3s6YIsn^v0zIp3kxx`YQ1L61g6Jx~cQX z!6tcLf49amQ(#q<9-*Z4Sj$}-L#(JnR;DjA^qQ~ z)-sSGf46Q6?$v5B7M}dvT_+lVEbY(x_?>=m9+m*Th7FgU1#c6s5jT%No2plwX1ZqE zz{$!1Yrx-RE0-2lG43znwCn8&lp?!fVfZ5}d_6xk2Mrw+?Z?fd>L!qKbCu`4xU;r< z6Eu6zzT<4e#!zM=X~as^K?B?v3G58#mU2C`NPOOM`LJ4^w+g7iPD9gAc8xG{?#w0+ z9mlHVp|oQ*fkiDx(^1pMH9ah`NMX7OnlUTE|4-#mpT%ylmAA&dVK!Dk`0cR^?nEL# z7QD26q#3O)l=V_~D9Q(ek*3;4q^ix3l>aVcvMQR=@~>BmuAAJjUT>dVT$>YeYoMcH zp%iH6@R6*E;S)%I(QMaImndVDheaVlXgmC6#}mT%bFWaH*wswA27*gx+_>Mb#Qn4wt$m$Q)~)BA-wo^k>k|L)y412h zNnPFUbhrN4?yN7D#Utm?936-sMS-NC%-Z(``#4;o@;3?-@7Ev##(fDf>^JfnTEOcN zAbn#IvVHb%>Xu4ba@w%UX#@uO`;Cv}$HHNmrm%keeoCJjaoJn&*m-t8r{kB^*_p>I z&KLXmi5!P>C8q|s?54(YtjqnQoO^QkABAa4Pa=n}k0PX%v?W{qnYVhDzkfmz(S=P*+aO>d$@;FLxS-ww2OeI+@K6W7Q z=qAD&W77cFm;ZZ%ga+I}9$E+WyX!0b7&@rljtKB{YY|R@dapciMh*yUCKkaQ9tT(! zTVH=9B;7j0H_vM2Q6X){pe|K8OpMPvTM(=XejZUf{(!%kQ@KRs{`-dcKUQt6r9%(p zZ?))tDjHZlj~UEG+j3#{cmJm&$9N1M^dx(5z^po$q^B*m{O zWk>hWNsrjkiE+=kx9TxvKB3C15o9LgnP0yG(hx5ZNm1e0KDKiMEpYaSohmlkGX#+ZK#kznotyo z;z(0X9Y#AeLo!im^I^Rjl&g>G2GPEF&#u}$`qpY0`d1J0FrPkt6WcOV$?dDv?wR8t z@geI7lG|Isva1az+SKz)1?NKphQ|Us8}(omXhc9l!p`wmh>@THMEr~Y!`)j(#j&*S z-U9>(!9#Eh?hxE9L4v!(5Zv7vEFr-qf#4S0-95o!aCdiim$$R`e)hBX`LB1Kwchof zFK0f?VtSbF>gwvMyX*ShS9MK+=YWL_&ey1KI(T&=LpOB8pl6xZv2k4Z%ko84wcI)M zzDEuh^}0n+P9o0z_1X3Kt*?QVa~*TY;9{s!EwmGP_1m`e?bh2Y?X?TpH&dg+p9p4Zr4wyXsVfou2kxP#uWYUJfRP+mXua zNu}BI;^THV$d<4~^U2c)!ZF*X(fUN|t*G5dP_+zUHVs@JecG(>cwFzflr9B3f29{AwOBjQAjX(l7eMn1V8Qm#YYwe*EBSK+~Gpw&a!K4 zt2Yny!$hG@pmuTX!w1d1Rju5!z14~+onFURAP`AsCk(Uw-h+?bD77T71m43GgoyX| z<8~F!<7MQ~<`cl!ocLE=OQVe_8P!M4*LodD2pXsmw4*NTBrbh z!};qfP#SuhR}%M@e<6RWp=63WV)T%ZQ!h=ke&$GXFv^1b$P}2c@XeLE%uSIYY~PWlZ)054bRA4+G71FtU6(wI*>ba! z(~z_B_k6fBW0rO1B?kz0#W!`T5#|2hDoXZBktz76Cxp~&3gjLV*;8Mi`P?mv?UDUR zkC-5J@7DODM!!ht7*8A~t44F*nB}m>R_#FdTR2s#A73xa4-H%Sls;oV->>S9OA0A3 ziX@PowCOK6_}-fp0UhyzpSJ(v1FFssw%*ahF-0ZVy%tix+en-5*Z88%+Hn|;AMuRS z!|<&|E|z-kdc}5{V)0i~eFMJ^9ZPC5K{bK^DcpPB*PP&1& zG<8#Sox04sT3@dkb=IcVZg0tsa>&L$yy*0nj1c?=VceeL8+*Rx72Xrc=()KuDbl@F zchPCw_ZlEj)t%Am*Vo6%p{QADaPt?uT4`oKdr|MiCU@$!KHkA>`O(U?~e4E8vm*e2U~mSDgZB%m^e>s9sgVJi5N%=}n=wlI+P6lnoC6)OAVrV7pPordG0*#6-0;uz z&AHchA+U5sdUO~l5hbEOS36q@A!2yWNaLe34qEn@ImRD}XeTfbqjh-k`Bx}a@jHL(?$VMxC z_nAy|z8i@q%CY$+@yjTHj znpPty=;D0e0^p9Wi>lWw_}=ti*uI1{6LZi+nJ?l%3r65%%UFB~nU@;7#dI|T76X=5 zU8EcC$}Sf3$aR;sXZy7Eb(sK#6b|*a!v?c?Yp`d{Zh`9y@3>PmX7h}U{0nDZ4pk==$PTHax@#S z9I7|?i7P-JVyk~&9{V&&acN^uf^<8d!6Oh`>VNrq7k~9x?au>b)6{n-R&iSq2rhDC zpk1vckzvYDI)$=|k+P-kBS4WRvb{!-Lt+K-!mHv__A6pG#bfIn(HvHCH&oy0jm4 zB6%1?+DlT0Ofx$PZ!PsANF8~#MC}pTH(~-&2Nizz6`*0uX}cn$y-qX1wVUL#lo!t; zg4@b^hxikVKufymGPk?BM$G#|+N?gZ&Nc_w3W#F0v_2^lKcaXk?3-v&98wF#QD@VJ zC+;I*PTs3NLNp-A>}L$l;C9QU=`$Y5I~>%;@KQ!oL5x*W__{IP&17RvKEK!e>(D57 zzEnGs18o+uq3pgKJMM8$YEnV!7Z1(-H{7gE;n0yT_C`;rl1q*R22=OGnh2m#O}+{G zP5$0i6`P>g?Sc+kxv!p7aEZ_N1)p$PT>~BLwU`cSNJ&@-o7GynD&lg_^_wr(u&ND$HG%5nzN z=h3UEo#izLN587}H>pvKV4?0S{XGyM(782m>39Q!8#v-*?x8-hWN%^|#!_j2u8Ai9 zTYD6QM*Ju?D|02;qQ?e+^#+K7UiG87t4VwPnyr1aXodVK42SEwXiBBLd0*F9chQbC zOb!?Y6u!8zVv48nNL31d2ad9EHpZ`k(cb9qxW6)!QuQEWXxRdDbVJM#zLLG;lS=A5 z%-^(zY^f&SaBzn;K+XYXm|%nzJgBiXxE3t(M#gHWUFP9!J3N*zqWxU^YF4z~ zPIYUq&i%c0-nRs8k6o>3&CUD{n8fM*6!+|@)K}67<&GOYwpOp6dq?ci=&jrn7Z=j4S4MvjD5&0TJmvknt?&6&cpFJJ@bEbi0&DijXoLn z;cspy9*lKa_+TGj%@J^A(8G#n<$y+*RO{gnB%<P8bD64C8$^w*q z&iv9bJ!h|;h4@~<1lYafr=>^g_fO(s2d22yKUr)YeSQq*w%N7uTH*HsC+OKe08XUW zGww-Ak9uivMcBEb?vyTAZi&&=r$d5@!V2f3yY~vUb-V51)Zz z_l$y`(Uv;wKoppdnUfR(BnWSmweQMTUkl1r%H$^_Ng)C}ekak_ET=W`9E+7uA&!e425X0TKiQJKcB z;8AI;(ISmHmy7WJ_G`&OHBBDFJn zTZ&BqEIzE5Geh9G)7I~<%NDevS2xS8#2`$^LaZ6rQlWZ-7;Ak|7@EjNBJ{JN^i^0? z!3MKOwm)O@$chl{O*Hi$QRap@(+-%xt@Q)%th=d(1#bZ^Gut`ZQ=dA4O(Aw$qeV9^ z*1!<#@8`3{+L(@GW`0Yf`EIkrpzHizFtkHA3{NarPx5G zWDXR_l>8C85Bq7mBI+}IRRaR(^MolJs7!fp;-1})NhVs2Bz9c-{dX7PG8$k&LGsFDRi{qbRt$0=(1?s3Tg%d-{A7&~w|-bIb71v5p)0iZ_wb-lc6$m@ z-)?yQx6%A}>z;l0a-i1WkHMv%jOaabR5seC4l7XE+8{S&i8dQ((Yw5eXQIxV-u@ElI zlO^RBWN*gS^5tW8*^3>a@)Mff6T_muzwxgL(}_NW^e-;rK2j%pFrXrig$uw)tjP7w z6ZE>FK}v4y=e~Bi@<5^3L1

#)^sdJaPYG=$mIhooAii04qZns%r`&A2|2Zl)Jy@ zDEda$CY=yy$DrYTB6reO5_II8oS)Szv*zr!rev(a4U?jmg$=kS&CbP+?jF6YmzOC= zNy9%?-5r37&=$jpI3$Elz!Z61BL*XYildrIq!!h71eHsBUEW$7OGXtvDe2B1RmQJE-w9O!qvX z1btoL8s=~ZGv-TQe2<6yBgGZ|H4KhRd;rXFT?9h2n@2VH^l=rz?VXUP5E-1Pxwx8> zm54}OcooQ?a)yyu%$tk3pO4T4X^(EsDI2A%$^pd^wM;E!=~#PD`aAAB@0nDK?G$3h z#vQPXbi&7(%hz0d3F7dFW!{JJ$l9e0(lM#c--C)>=V~2e4nOuCTlqs>* zMMxzs9fd811d5)K80X8cxt3kt8C^B?$)(xTNH>tjErhI(P40HWknj0$bY7|EJvOM8d12-Ns!jgN{a+?Dx(9gFs+#1meBGyK4X}Bs@nR!pn zrsFp+&_=UPN`r7%`e~ybEO?*qNmvzX;3V}1ltzy>$X=JcS~QtA8<*U$x`=z^;Fl23^(Ja|zsJRwV#+BE z_%!q>z1b8I>v9b|cR14j7~iYFCYqxDf!L(U-Z%PrIRmZU#=EPTmj$c%L;?eApYt^;w+pj5#Nfu8uR*7Eh%wsQGvpY}YuUQ-~bM1j1 z;24$Fk;1q^NmB}OsJB_NE!aj5Dy^h9CY^nPoSkqX_+6RSvdMoqMEuLFab-#F1hR#p zLRgHq(G}9-c3Z-PL@unRVmDWQD-D)OpqqVt(hg3@uKK#g2kuV=v=iK|rPiZJiv_eX z@_m*KDJKY`&gN>>Xm3(3iGs$KvhU}TQn#hKdWh06Q7mL~AOj$+T^8O&rIzn+xOKfbAh)2`%r4C~HVAX78h2khazY{ZacDV0* zWKc}5^c3|h2mB}en=e|&cDz2+1(y(t-pL`H*IfLNUS~CSJfhgra*re~9@WubNvg+j zZ%$Bg@3r0&nVTcXpo@o5lg>#Fs*GSs*_;KfFxw9`6x>P2YmGADI>);eu6Z5VsGRW) z=HBM~3Z1&IA7T%Fpu8vPPf3Hg?M!HBNLRejc`p|W-NW<0Qwy(7UBWAOcEK!ArrN&v zO0WJQ6dT<4h413>y-d5K>0=sDS5cv3Kdqk~7?d|f)D}WSNTI$A2Dji*^ULy$4-4WguT=r`>GXQOtJ>=fn z6*|t7eQ7#T8||{E<)VIO;A=rVr|s1yQ?Cfq&G(g*o+}e|-IU?y48tpe+ueJZ@T~KWlk&C!Mm64RbkzJf2W1A@IQs!D5(4NSS1 znF4bJ)NBZg#VR#$=zRDK_7$=aoKja5%UQTWe}#eW&~+_lq)SQ@i8Qo3~+>iP(M zzSQ*by-x=*HVgKQlY}V8h2gm$ZVNQr+A1|fjjx?&s4FIH`ZxlQAQrYrBEJldcCix{7N|Zo* zsqa_K+a>&C(Dhgq>=q?r6Ogh}Wx(xajSa~HSOfC7jukips)q}NL^B6yq-XG#NYB#q z7nHC4u))fT{TJYzcw6O$F;2rvwG5YBZCy!_izA~uds0%#q`Yc^kwLHVQReZxHk?u*t_gko%Q~aEPpP z5~s4=UH#nKLF3#ZkM|)YW_3r6K^H=$1n3Kx3@=bit?S5q|K_sx)M7_DbOb&pI@Kt+0$yaSCtcB* z_-6wUT%?d9gIQ>=Ufq1$PB3o5r5anpVw{|Ak|Wd|NJV!e8sK^E7yVe0{=u~D1T8rR zocrChX)xURQSFW76&~fg({y(DR-GW%m(QGe6uK#k)7v@F{3H&V>#ksBb0t|!D$q@M z_85*X11|~Ef;Ln7e*C)Qz4$~sPi?c8o=L{#7SWlrh#FK|5EG}j2o*4R!^~7%J@rB{ zEc6}z+d@l1|8k)p`$o;(lq+261Ab?Q^9C?CTR*1{bPvmM@R-kN$VXkNyj?jiO0DaQ zg0z+Rj?CWoLB3t3tbUe%JC?U>68m~RRpZP2;mfT&kOWlToJbBE+Pdj z^$sJ=qO9-`W;3bZM!n)`M-q97Q-&JQ2B{9FpC(3BqkoGJhE^;5#CNxGufKEcXljMUQMq zxxbf1>1jvH<;GU-M)hjTL39THGcocz1OY7cA~luhambu!XE$HipI}S>ifVa*`cR)r z%uhHZ8ymAEHblXCj%~F-jIwz4!s}CBVaEra7JNTzySIp-&iy6SMm&3T;{+OQY9Z>@GjJ{l6cXR)$^y$9T)EG z<7UjxXS=d(-?}=FxTaB&V%2n`7$4U!zhf2jb>TlX0Hr6uh}lnEi}(tzc`CjQeLs-# zT{GT(iFf{ZUgGyJQJVrgibv;8V`La6nK*0(Q)fC&Anw2k)o+qk)!c{I!l zS5jTo=$6h8g>Zr`_>23`zErL7qEEI$+eNpwyZDh53>)nck$m>B-nz5eGu;(tz4~}7%@_8kKO%Y}DUfImFpWn;I13-TiNSt|N++_W zE75|z3+WvWYm!h-_7t>axfmD@wF3eaNwm`az^|nK|5fy`DdOf|`M8LZ(lI?1vnUsd z>Z$BiT{#9lthZ+0Us!&AOj$u=xs_=r{*z{`BCrqqGZ+0Y)lNu_VP@rF=t_g}Pu%ji z+yeY{^gpz_7jFN~Tvw^i;cwba0d?EA39-62R>a;gb6XX=i(>fNIySv@K_2NYRBXxy zQ;TcM4n17dN^e#H>RO2qjT@f|3@FdI6`1pccJkDB`ck0%Rg~X{KDRTGdm7c=R8%na zrK{L$Hm&f~(pde}`101}GuIQeXSNl#pVMrUCe@ln>c9cucoQzf_9)cCUvHtQ=oc7s zBfXBiyy;1!Y1&Ia)g`gi_z$%*J#s4dIBwD>@-8CC=&El9`BT|Y zoYxCL&YMdAuQ=S*&;Q7Q&0X_2>-n%@I=tq3 zF{*qkR{@k2r1&j{Puv9#q{*#P+1RR0{Cw=CWdeoZ{FN0kbNF9Z;&-XF+2yWSG)7$M zD)gk$uht{7+W28WukvD~Y*#bjz+Lsf#7;zd7Byo%;f2t@Tw%;Im0#s1`$81%ou5Z+ zb=@HyL`3qY4V>#hBcZ1hk!QHnSM2%DSBl}mj4W254XK1#>FT_=FBvu=r$j#nXtfL5 zA-!aBW*NElK@_iqE$zZKvo8Y-At9oY?xOtbl2`C5jxjK&0+5e}g

~BHzq3y)t2$|9Smr^5#|JZ2G_>j(G!j_wh8C=PZM`vajOfW#R-ELW~m7$ zVE+Bpg5h!l?6ZZl0+2V##MWoS>fD1L)2?41iVkeGZN18lU}qmx9T<+R`E@dUDP6&i z9CM2kryAa=?|z*-3wiad-EkFK&L}Nz81hD7uP&s2(|eX@QOaMSdX{M$XZ4c`%nA8! zPsR5E%dYs11pYs-!^v%A>%&^*jqmu=m9NkTB_Sd0lTR36Tm_;xGvA6CMpi({G9GhY z&yNVk*hnN3TXBu}bx8kdP=BlVcz>n zBvWPM=m?1DuOk+wViVp|4bFJ#0_=cpD(S{X&L|qEQ-Bky{k&f&|2Hn71s5vswhd!l zqP>^Q>r1aBg3->espFze9-T|KE*+r|nW_@JyO#Cy7b*qDrDjPS=9l9EsAv&Jddxl?ccc5XRF;cM z8p>6FtM(Bq*M*b{5P|j*RPW5wPZ}D&Xlm@KLJAV_ASOuLM*YO1vAysxe=;})mT`0# zBC2v2;c?4l&GSu9sjZl>soJ$Gdp|#QMt+0nxXAshuJ=Fq3xWYOYM1d-TpmD>tb^;# zEmV1V;4@s!0*3MPbZ{04Dm5;!jET8#?w;6kEN7mwcYd_A6e8eu>K=o5)`#{6^m@ja zs;%+06s}$g4Uzqla&QwkHcDGq!-bk_uG|UEEE;%>a=I6uFlQ`^t z`#~0*ZH$UH=?QOjw+U6+XoxftJW)%-!e#KGshbutMQx?~jfeRX19+v`+0)L^%(dw3 z-QL|`M+cyn7~6K{j~A3q((Y+jU!Is6M~#k`*3-4SjoRMf^6E`lX$d!TE9rqxH}K|2 zQ%7AM)cTsW2z;CO9d{eRDN)dY0>L?H(5gmV*QPI$ia@3m3Bfh$2sB~TXnun7=L|5dVXxw?K}9hTls$g z6TR-+qb|*^Lq|McEq%uedal}SG@bv|Dn%U&pn;`+u9|ikj5)i9_2h|bIip-8b>Y9cdrGg1eT+6rA7Tv4QAO_sQlKPHQhp| zI(yGzCr?}kTL)4!yH;}(cCVGX?yOvP35LLo_#`8P*;#-L#t@fCbm^%(OCHYMvgFKR zOHDCQViuceP+@DPZZl960abc&aaNAIdBoiOR@iU1Jvez~w#(X}M)e)>#+yq1iqjdl zZ`uaNar{cmxoB(@S15!9$#>Pmll{ufa-6(_S(8xk9JgM?(+TO8`q;Nf!NNK&zU zIf8lPgd0KNd)_0H1~}U27nOSS}gry%m6yx1FY`kRKX&F^|rJDDY7Q zW{FHR8MV(UtM`P0s2h3S?+u@YV{^WomMySQW?N3r$7#BO5C?( zko)scKrXy|`vB&!{AEOHfHu>x>}WvnX~}=kyZ6OE)aWz3XT@yzs3|^59IxHtMx}Obo-Wl#~YXo@g;l}y6 z8C%L5)LKA>zy}FBHEZ?45ts$lxTpaEFb2gb?IAy9gU}J`d}7RjcrzOL}NQrY>S&w;-=Zh`b_5Fto%hPZBLd2RE3W!B7^Q^G}e`7RjV>E zRSqP5o6yPJQL!uijUH6e|CAN-lznvzNjS61=n4x6{V%+*`KxAVjpzVcbI77C{)cZ% z78f8N)RRObn1no z+qlr~+`OB+O^pOLlq7;$pSd{pvl9&p$v(S8YAbgi`@vOw58GoqmLB>?bV-Q%xat0P zba|cmmy~Xuk?sG^KY({!)99?m(thtF#uM$<I=l%FL0H{{_eZ`AJjTzkh|0T%wZj zf^ZIE)laPY2RD1~bAGqHk86yYutSRHM}MWXw(jR{Kg=#olC0 z9`LIGo}q~hu4o*@u2-P=5zr6E7%X2d{83fjhiXZIxQVb_txpwiALVOKUFkLc%d2qg zubp1_Z7IHCPl-f9ZX-K;-W}kOKQS#+VV1qi{b`GuSU{fecc<|Tbj(3=o8C)h`rwuURvPhubU<_O%t>fml&HPXh*&0YO3ZJ+wKF5&rw3G zbL@Jnwc@DsN{e(PSjl0_yp(ka5}_`@jn2F9@h4rHSsF&2$$ZBq!_ONAX9sbR>X%ZqreuW%C87y+q~3>oOV$pOwBa)!PYq*f zz{!G$P}jcDL)6P^hkT7k9{|RDzb(79$V^JFA9z0koEe`h*E*eBl1MhefEPR$6^0~!ZD$Y5bDhc#c^ho`((W~s z2&3@2286ACvaFW@@4S|=bFM>|e$4VvoeD*IvYkw04d10TYaf-LZQsn?n--m)Gs8v%nCvQvEkM!0j7RP#)8L zTvA&J@h~ME05dlguNTh0Z&kX|xgLRFT6{$}8EBL5`?gRFt$7o{c$Mw{lwSlKLH>B| zftRZ7P)_yeX2(|OvIt{#BjruwcWqbtOupE`Ql5aRzRzjfGO#I@QnhP^ZSzmuD7XM& zGQM&GoV4`k8BF>FgtW;%g+yH&fc)qy4>WTdy{wPmF68r>{{;qX;jIA*eanXfbU)OB zKGg|D*5~&HYHpu*cAPPIpSN9R>CuPOE zby>f*CX^A0C^~2GE4BHKK9qjXEh#%R982Txw$vifYj z2gn3ZrmJitThGypd8tJ3IYof7IpRhOEBA-Vzr}l%6+PK&2eK+C|D&O7Hv{;MCS^pi3YuHU?5t%YOC==Ms+D%*8h$dR!`a>!y-8v?=Vn02h09u# zi z8S3W0Z33piCt!E|-LJKksGb`(6!C&U4L!`SgP0ird*?zckcg%Y7m)E(4IU7No37x{ z+AxqR{w#(M;=so4d)EjFUR%UEB3lNC8)ur#qnGqTne~inq zC}2Z97h(YYG=(Sx8YrT#@ZdX)SAH~@x$}=>8b2QJmy}>Q zq!q?@R89-D3;6PM9#Nf0g5(ZfGiYb)E{H@b`HeB>(j$R8kAd;w2@BdwmP!M+eTL5S~+Qj`PJ;}CdYY0 zF$lEaTuPPgTyZYT6{8gYAa*Ga^L*CEmAHCeHQYrPTfNa+5QL$(kd3tGdEt|AoPVIiBWYKqqG1w`C@6AW(3cV0B1_9X`eF_=@wM)NXWRZp7ej zUUZ22q7mJ%vgcy6bGYJHG}R6`$C>`ki<+YTNIPzxI)`cBJ(s%)vj5N{FXg&dHeuBN z-==~F-tI`2qRHN3GxdOcIByy7!V?cJZBb@n|&u@Y5$`rx}VBV4~;6RcJl+~uNz{C?2N)U%D1 zwLli@V0AsebbWBp_l7OQ1mRq4aZ@?7RX(Jb(5fZs1B-Q9SI@P?K-D3HSPj*2fY*3e zJFX}n8QWgioMmsDb%KoTT2_AcJJ~gcP&(m&4Ltz|&XV(_BCcxbOHWDlV? z6r>GZ8YLm=;pIKdXBo|Vj#Vf9HPuAf*@SDmek>QsS6r=C8vb7FNHi7Yz(QX3zh{i_ zZ~ge24qg)@wnz9|dQRgv>4Y4VP!3YsXi&f16TKPSNO+iixXMl&N$rs)HV-8irp~88 z2v&ARpWu$=nRkvewwMg)#vn$1G|;gtUi`-SBd8%mU<_qS^T1?*oT5xKe@Ob20(7=O zn*pb)247}bQPh-r2UAhKM7VRMUgEekZ6@Y{;bAf<{|d zZwnJpujh;3dcblCvSJG1!5a6jl|mB-XcZ1iY6&-O*E9(~)V{}2npD`Q8Kq~jyKd_0 zN)J8!aQ`(zS&gRr+khoLHfA;?74l(@5Djya0a|~A^lW0QOs~K^K%da`^cR-arsF5F zEophXjD|rMaW5{Zao9UIqz{i)3`eq8IlHdtw%YErEnGtZoisZ;>XK17KO?~$n$ z{lsBt`i|@pLIx@5Fh4E#UKhX?{5H-N8P6rhpYj4{yj)Lu)3U{?bl1~;`9Ko*c zO*)-|+8ltl&|@0YjGJ% zn&Q2y>P*^u)J=i*bVL1~#bK1mfhtcjx&7es3cG!wU!*YZXl3rclg@?yG=NM0Ymk(f zsH$bsP?ZD7+O*}WrqF{pj_X>M&lw5!irh6c(b)_+03JN4ZTNWf3-d|b(o#-m=^fpd zj4uA?#hR*lay9VyOt#yt?e{haa}o`ng+E|q{FJ@s#Yrj52{O2${Wq_Zk&XS32wl_+ zi7E7qDXZgK2wn&w2V4?dw9dG0|0ZOz@n8Rkis9r^BIwG-F)Dp2m}E2<34y{KdIi+? zbH%0?%jDa1n3}O9aN%Q)_wW2@5++G%cCa1RFbPrpz6IJ7^_V^9zOWfAIE!{6tfU83 z@$R=4uNl*xhYf)Zf)a}C*m$p)f3D8aa{{9;97B2^Rk$Mu^BIb|-x>GdR*B+V4VCxB zz#a1K84)xo6#7<4&(VP(KKzFuW9-xkmkjzu*Js;>6|@6;D+Tru8PSdRnwCvNBV})N z4x{GYi|0ElPY&jkGV%!#H%Ye$sctHtG|EqlwrlDaJgE;j84dcgg^o#H*t-xQMsb2PwaFrpfM<%zAk)nZr4WG zO{b^&wnl0n<+|iJz0q*JHMV7g2Rkd``Mgck>#AMr=@2qxEcwJ%WDuzStPP+G9HO7I zUC4{v%L8ecra&4dtqsh@q2{rtXiF}wg7}b47eop$^Hu`PyqSzad2l1gB!$jWFOpZD z0ZtUt2=7)N411X1HGf$i?B?ktSwF||d2U*>*|dpBD@A%mn6AdT7yNt<=}ihr^Y>mM zz!1N*X^wQ(>ZK4HK55FU&+VH#IBTnl0mB8eT_1|jL$*48W|?Yu&%1y^7t&C;UG?uy zf-EQ}bUr(|*=@V3?{PeXW5c8na&vOC0X6u0rs|8UYJg);>W z+~3pLB!Kmb!S&F&XMsnzDoM4iHg}sv0&i@f$jdw^)L*@t=hKvV{Q1e&3$8%w3MJ4d zUVfp9v11j-Rl|%m$x3ie)=)&wV+>Oqwi1K%)n%54dYt{d%{t z*!=6;!hwx42bbL$f-eE;qEQ<@gXZ!UZUsJUhBE1?fx;%3S#Px_6uZsg7d zUcS>WUw<%PmZrWc1JMYalK8p{%k85f9C^SCiH-wC`$S79W#1SdjFD|BrzRN;Vr*T- z{~(R*uGRG-(C*mSpZOsyEFQmx5wm9`#Rz=)+kDE?d+Oe~B|XB1`6Xdj_NI~DhUc4R zRsd=U8i3i6Wc5lz;+!|M*iwcCO|wOrJI;OJ+u@C+)d6vY6TJ|h!Vl}ZkM?uc+wnNW zE`ghF4la!kXpx2tv5t~4TTwMWZ!^V%M*#upCoqColQ#!>Wi0aA zHiZt-Z3Gj|9d+LoqfTC) zj&7K*CD=IeN@ILhS4(>AG3Hw#WV|J1-Y!Hf&8vNwXJU?XPU3D+_s%aKfb#`3%=Fgy zKYX8(o+KZ9pSIv|OkC#C&%s77gz-wBCg1;ux2WU0QOwDlM-a*UeU5uX zuggX%6|OF>7mS9utlQUk@-FUKae1Tx(?=mrQb%=f$v*B95jT1ljCRTq{$Y|%xUJC3 zN=$#e-3gVZ-C!Xj$-$GtV>7$oMOPS3^L<46!^Pic`cD^sVV!e1Y#N2X*a{Vv-)zMR z7dd8JygcGyP9G?-z!f!chD-grZ%AnALfkiG>ZbGhJ-;YJPmrhCI0OjVXJtMNiaouY zYXpfz8oxZE(Cf}d>b`qlON`S8p}0tA)8{o*ur?g(i*mnOS$(LG&evCuZR=LgR5M6# z>Q$)AB>y})8knqx>G>4Iq)d6U=u}P`-nj^&284xS{V{#!fPX_7bPU1&AE69a{-(~O zXSjqts*{ZG{?bhUKss(ibsCAmcPFamPF#Arl_>vIs<&Be<9m)UvCd;#TF=~w*`|XoqvqP zf5R8r#8&m~g=+ei&&mVv|7+OryB=m|4~}t4Z$}qIeU}nVg8l(Oy!Cakx*`JKjc8gA zu)X_xU%=J&g|oW-w^P^K!sq`hs`9@Vl>tcRpQZOM_#c=|UHd-;@waL8|J!W$|3S?B zpD0EF=iG|g*%bQ=(0FBw++cZk=+eF5v=uteo*b6>Ry-GUc+?A=nB1Z@t{z46&r@vX zwyJK|VWAw%HmQ7=vH7)cJZx)`_?ExBC<`UPLs0s23GTn^;M_qwi5N_EcuAR>X58?}td1Bdl5kCm?qlpNe`OfSTm_1zF3*fZ%`#F7ZCITgq;G zrYb$~Bs*8G@A%1B@D=X0_I7$l)(b#AUOD^Y7drLJDSdNI;2dwnjLu#qQ*&#R^7emR zZD3)Hq5(7(Dm@YhSLAPAZ*N;cyN>DxtDVX>skqFN>?}(pam}y3yG1JWs;IPnfo#Yg zW{YYMMC4P#=3<{*s_sb9RZ#5-rfFgLH0Gf^TX*ENlb5QK;`L-hp{Y(s(dctTN+-w0ylpbeK-TTGc0Jud3bin1l8{i^XG7ULttew zPh;f~#%G|fXl4pj8VF_FboZuDVlzucu1x5EE@$v(1*EH0nEG1SkY!l;%uT?SEyFy& zWKsF{D1BeHaH)`cEeGbjwXZbVmA=hbcjQU&mIn;nwAPEh?30^4DMZ^Lbo%604(-hI ztLL>luG;vLy3AU0CE2vwkCyfStAd5Rz7m6-a6%r)xxkEZG~UPluNt0gyYr^t7JE~V z7jzH7%#cZom(7jSV|hna{rB+$3($>{JBUsf2cghsgCyazGEGJtX)8bnK7Xood-^4};I_CejL$JhW^_cv zloKho0w%>?5=#{MiZdiZb26w2j(Ux5{B3d{i@|_keI2Ps4o-cVN&UwEc?EiTZ|ro| z7M-b@t%UBE$y^`s3vX*>9mTfwDgZE#0mOGQRk8EAakP{|8I!eN+&$Zk^(F znakcJ=7>Ive#!$>{E`U#_kV$C30&P_{{AS9{eRu380%k-1bBGvR|{?|;HLQZlsJqk zf1j@(Z{tzR-DHX0-NKPiZB5N3I8J;PcA=gB&6_f-sgg+HM?7H2|IbU2{$+3nU?tE5 zeD(3;M~EJd1#(sU-C^Sqvn())_Mg|8?Fg{A;4s=zXDBW%HN}56gZw;d&E0r#%>!}K z&HlS_wEC}&e{TY9694~l6=L=mP4!I$&YupszneU4*4VG1YcPAC@3GS?5jNdi2r^9T zU8Ur@3Ox+x9c}L**KXN+X{DU`bEg*kNIE)NJfF1-k@;`aXmP+<5NtBpe_`9aGUMxU zx77{yu%2mV9?+|-`PI<8Gt+>`u<3qZ%pz$Q5x#JLI$7MP23Xnt_0qgQJP~ZNs1@cr zj=b}A3O#%(v=hFbR*BuJDbZ0c-_+XrIC4;v_NCRs?UdQ$_@ujzpZBrmNpUSYaI;?Z zKYIZwTH-(jn`&*t7n?lJHp7oQAJd3$Nm+1AJR>GqPW8O`dWZY)xP*G+d-f}V0+KqJb?B})>Fi~0Zochyc%YVV z1bsXVBt=0*MfE;zZ)Kp!sGvc=Ku1M=IJ~|*5~y=&z4Ko}L4DYSyZTs+E+oS6_!v{W zw0HG1xb(C*$N$8a$8Jpfq5eJKQTAQ>xZF;uWevKU{GhdwR_^@* z7wPZ1kRCUjSxH&lJKjlaA$?2?iWLOky~oF7(mFZ+=(gx{vy*tlm^os9-D<0*TI^kL zGkn6Gwh@bgIr7qWkFYys4h6lW&Uati{oED4+wQ?&Dzc`Ojv-!U_Fz5Jn!yU}ZPeXR z!9rs@1_veaI*svuI(=t0H@4Iw=o#8auRdXIcejUufqEO zq3$ii;@Gx!(X}EZ1Pc%#K(NMw2X_e2xCM6_cXw-82_D=X65Jbinh-2_aA}}}JB>Hi za60?@*4q0#-}!NWoaa9G)-Q_cnpI=WIY*88j(3cCU($bQgl=h~E^}Zm4S%9;R5)`k zd18)VZ-{a}4+51E|t=z5mnYXhFJHYb9PbVDnxkfcqAt_>knWV51mjo+s zyMKD!WJ0%6xP!-Qe;f$(2-16+BC4&UApta}$`x^SjgHv4v|cU|e?y!9nG9O|X~^y> z^96ta1C9)fj0lN~J%X*zZ(rqgrnwz?v;Ddp=(<9V-z#~X^?YSXR@w$5Z~!kJyx!jN z;%l)QXiI3G2t1$%6lyLU)eQpzzlTG=W&thZL~eYfz3dR}7z601_1(uMHq$|_W>JZx z@GB(3Iq-Clk-zgCT4UD7d<5y2k&TRCW{FzN%dG`(snh)=D;SNjtSusrs;CZtg*QjTZtnVtfaji91@0uf`*q~}{c;)-@U@m_ zZ?9iJ^80HYDh=fETJNWFid(sYzzUfPELpUdR7oC`fDQRa3qe2ch?d*@E^|PE*Pd>9 zO$U%kJl4_=>=i#oo8>?y_3hwYR1o;EAba5b$W8A2@4?GKn-7z!o(sIYf33EV6c&^# z?R)=D>efVuZ`4#X2j3(J`|x$o|3ZjCm4R@-yWKW)gO*FPL85_o1LAH@1_qjS zpc1c8mM+xc^vPg*993y4b$;EmJVzx_k><6Jw?%PzX8o7{n1;Wci>2N0oEOX;yRN=C z4ng|a-+15cb2u{u-CuN3RQYd&2X#3(p2dm#aEY{8JZ;YZ6ybDtGg?3ujXyC8Enp;{ zJu=i$tA{P$o>Mu2qYTs}&bP+{XMJxl@Nsf3P$y+2UD8WUR1bF($5oa~s622$LAg~Q zL0i|=GhvI?UGS}S7S%$vp4I%r8A$iLc?zEBRTbCGnYENrniGjT9>it6|8dv_bTHVwgWv+@cl3r-b5f{6h->H+OBs;slUq{nVhbR~B*QJOawyu!216>{-c7EJV zcz^fP9|5#%ss28UDBpwrAF?HQh^v7ISC0>J52yR&h-T3TR5kJ$Bxd;mPPxInyA^~D z4YC+GbL{F!5czd!Jpc;aZ9Iw-Yj>^4|6EZ>o`>2xw{J>|HEvM`{x*+?sAf>?QU}UY zZ?lW~US-f6 z8*%S|d&hx-4AOZ!D&e)Z`;cfQs7zjKE6`~2ZxB-{Vd?^|rN|3CVD$aXmD=(`2F zM8JO^?-0a?xZ95ok7s9Rq1RhkaU!Qb@;fs~|Gxf*N#<|wGC`Ko_iU8k-rgSJsaH5i z%v!RzxF`+#x3B+4k1F==(G;_|B zC%-r%U(OHMH~Hox+umTwVtc*j#c>Wtc%lg~R(}rDrF#^?>cYfbBs%6c|G3&RD5Wr- zFi)NHHp;q_zN+%Oo^{$arbITnXyE4B7t@Sqm~cLpzZ&(MQK7<@zHJB3l|V0d|IAsW zjDWkEvI}_V%f3@tZBF#XTxMv!o?d>lRqfLrB%CGBYxI3#cv|}SXqqXlBGaGb_E>b> z+LY&KZOmMyI&+GfC9ktD?Yn_KB?hx~XsR6)9eG`0?wG3aXjLfjzB*#no?@f5yriiA zV27ocZ?D)P)b8_gtYK%ibi*xb8+Rc5n#>}?rZ}^BSz==x{N=6w(N7Az`5Ct&ed}vm z-P*D#?|4^=Q%vA_uCy^Mq4RJRtTxz1nW*CR*67qVPYRL@;cB;XDwSkVbnCM$n|Qm) zd>iha{3}0kufx^(th`la;B0#A?8{EydkM*3$w;SzT1*7bkCBBi~x^alYYT^)^`bCJ>t`y*ocr!$cad~L}IjeGX1lLRO`x^LVfKIOX57pG|YLJfc zUR~a-*TEEg#wK_9U0Y_?XLJp9?S75fYEMhHCo(NQR+mPN^IC&$XT zYErX;CyaQU7m$Apvs$JE9pkv~FT~&a8V&nvJgCqUq99qGb}5PLhn;GGe4qLHc4Lhy zbywywu7Xy{e`^w z?tEOHrV#|ryc67WcbF|J=PkF(5rm7DbT!)B;TGQKX50(jXm?uq%MM(IVFasaOf7-w zHPRHTi;2B?<`+uq^N4Jxy-g}q3TADl+rq#rHm43&W8a^KtH38~=MohPyI|19uf`P< zhuQb7!#0pki3;^Ht#aOrvi?Cf-__~Df}Pm$?}c(Ziy>aY65TKHIq~$2P}?y6cR;$p zJ-h0e(rGf~nCth@ol)jti{Ado2*CCMj(&`KnL@b6JyHb|4}_(I@ELaEJ0;_F4jSKH zv~?<-vB8d=hW`w2WA%%%ijk==UI}E#F5lJ8DcA22pIFLi(^GVDOf?vb5EP%nZj4un zpt8W>=cf}@_7y5q!0q`|I&-qoeT{K{=0T}1*n&kKBQm+QgWo$oW5q1ryS;ps;$y^) zpAI;*Zu1R3ef!ME5dvQY<)TFqHj3-e0{SCIV=d>P&Z5;wzZ`w*K=VC2jprUbCz*CJ zGNT47FP``H8au`PaLmY#eMge``1EPX*D=y)zsx-M(CYT8o2{eL*Fp>GT{7rV%hNbo zjRn9Dg_qAccsJ~5-9djTt@2Be)-f`yHdAbo#VAy%SJ}E`$0*F@6oyljCD85jbU4k@ zTQ@9j9Vr5nIUs^KiLTC3vj=T_QIo~dWBEDt<+Pj&N* z*lEvsTQtij2wKT+)6bASUCiipO6o9mmaVVNowM_R8Pe3wW2)U`6W7;_r22Pk{A6n_ zZ8>XG%t^CIq-aza&d@yRTd~rbrDJLRK*KrT7&E77ubKTBK1=k5ap*8{L5)q&MVY>1 z>dWF0QRG`np)W?|im^%gkfOG3BKkyKz!vVKr+ab>X_!FusCY?NU1r6IY)tyw8MrWx z=a`8hvq&Limq8f>-OBO8;vg$n=|qdDpl9T)3N8A!=eL-gDXd1Ec}2(Yyo^b}UhYA4 z@O9D;@32)-1A$k@gXD9yKp|7m$r9fOcXnu3*aoZ-bst5>6Rkg}Q zhoCdus9}`PGKim%(&`|3YV*8!)@CI2J8>2_>Sx014*( z3R2sfKme!fy}w-_7ML)yccur!Y2X@Y)_Yyr#`}&pK{Z=n+wl;ZDMtrjRQfysgD?;f z<}&o%G_6Jg&CKSn(Vtv=#Q@J0?Y z{OB@tMmj@zJyq$%T&?y5R&CX%8$rr+)s&oX`Miu#%n4T=12-=V=3N6747Rp%(*?SM zr|!RrC&(#1S!`g*@-vG(YZpL$t%wA!?a_!LJ2hWqTy2vXWXpfOo0M7)FN1*$D`{RrYa_ zT7!usD$2~CkM3A4$ORofRPr@Z9-e^4K6gXHa`pwMPS7uF2H2T~G+oBXOGD7*tbQxX z&ig_d4YqH3NfiyE`mhl(6#UG_JBo#HdjS!2w*UrWu(P5sf7HedzQ1S|8_^R@K=%;7 z9e*Vc<*i6XvH5+|#b9QCtfN_$iYncd3MyNyD^wAXlBp^3`vp}T&-w`>BNKWs`ufci zAUBmSq_(#QXBAOz1no?;4Q`=wbkNggvED)z)cXoQBUsIbO?>)}ZoTKFj9&|Y7 zpof_Gf&BUN-PA#k5T>e35j_px%=v*59xFK33sg7$?w`KzM0+j!+di}h7MCjU^g`bJiiTqxn?TDZ! z)}q}qV8vF~@i2-Wt@|0mrefNj>$A)$>T9h$&!Vr~h90){M9X7Ig$z6LX~H-a{~9n5 zzyKN1O)za@()2Y&_Ug|WAbLpWc#F*~BBix~n@sX*)`D&$r8Sq}6gliBTOHV#D&23% zLgZ_Ab%AvyA;LK5QP~{{1h`(5Ccr#c6XS`6ohyA9l6&rk7HL+fWH)P-Iie>9CuhLVZ>i)$J@tbV_F4|vT$077iFPrc z4nx>*B8n5GIKWD$BA1?zAtFmL!ZwLn7{A6n^O%HEV%ue&Lg`j6>uIm6= zFtdC_Xj#;ove2R4T?Xm8;2@&iTZtt1_ic(QGL608QjUg6(_j~aG;iHTu3C({%DB

bD; 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 K1|Xlm3I0E*r7=YS literal 0 HcmV?d00001 diff --git a/tooling/doc_generator/Screenshots/search.png b/tooling/doc_generator/Screenshots/search.png new file mode 100644 index 0000000000000000000000000000000000000000..c131311b6e1f6e312f87400b81210e7cf949e073 GIT binary patch literal 26120 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

(_TCfpq! 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 are actually +//! calls to methods on **str** and **[T]** respectively, via **deref +//! coercions**. + + + +///doc comment +/* + This is a block comment describing a complex function. +*/ +fn main(x : Field, y : pub Field) { + assert(x != y); +} + +///qwe +///rty +fn simple_fn(){} + +///qwe +///rty +pub fn pub_fn(){} + +//! Data available to helper can be found in [Helper](struct.Helper.html). And there are more +//! examples in [HelperDef](trait.HelperDef.html) page. +//! +//! You can learn more about helpers by looking into source code of built-in helpers. +//! +//! Like our JavaScript counterparts, handlebars allows user to define simple helpers with +//! a scripting language, [rhai](https://docs.rs/crate/rhai/). This can be enabled by +//! turning on `script_helper` feature flag. + +/// struct +struct MyStruct { + mana: i32, + name: String, +} + +///a +///lot +///of +/** +doc +comments +*/ +fn another_fn(){} + +pub struct AnotherStruct { + pub name: String, + pub number: i32, +} + +impl MyStruct { + fn new() {} +} + +impl MyStruct { + /// Create a new `Uniform` instance which samples uniformly from the half + /// open range `[low, high)` (excluding `high`). Panics if `low >= high`. + pub fn new(low: B1, high: B2) -> Uniform + where + B1: SampleBorrow + Sized, + B2: SampleBorrow + Sized, + { + Uniform(X::Sampler::new(low, high)) + } + + /// Create a new `Uniform` instance which samples uniformly from the closed + /// range `[low, high]` (inclusive). Panics if `low > high`. + pub fn new_inclusive(low: B1, high: B2) -> Uniform + where + B1: SampleBorrow + Sized, + B2: SampleBorrow + Sized, + { + Uniform(X::Sampler::new_inclusive(low, high)) + } +} + +/// Range that supports generating a single sample efficiently. +/// +/// Any type implementing this trait can be used to specify the sampled range +/// for `Rng::gen_range`. +pub trait SampleRange { + /// Generate a sample from the given range. + fn sample_single(self, rng: &mut R) -> T; + + /// Check whether the range is empty. + fn is_empty(&self) -> bool; +} + +impl SampleRange for AnotherStruct { + #[inline] + fn sample_single(self, rng: &mut R) -> T { + T::Sampler::sample_single(self.start, self.end, rng) + } + + #[inline] + fn is_empty(&self) -> bool { + !(self.start < self.end) + } +} + +/// this is a trait =-= +//! Helper trait handling actual uniform sampling. +//! +//! See the [module documentation] on how to implement [`Uniform`] range +//! sampling for a custom type. +//! +//! Implementation of [`sample_single`] is optional, and is only useful when +//! the implementation can be faster than `Self::new(low, high).sample(rng)`. +//! +//! [module documentation]: crate::distributions::uniform +//! [`sample_single`]: UniformSampler::sample_single +pub trait UniformSampler: Sized { + /// The type sampled by this implementation. + type X; + + /// Construct self, with inclusive lower bound and exclusive upper bound + /// `[low, high)`. + /// + /// Usually users should not call this directly but instead use + /// `Uniform::new`, which asserts that `low < high` before calling this. + fn new(low: B1, high: B2) -> Self + where + B1: SampleBorrow + Sized, + B2: SampleBorrow + Sized; + + /// Construct self, with inclusive bounds `[low, high]`. + /// + /// Usually users should not call this directly but instead use + /// `Uniform::new_inclusive`, which asserts that `low <= high` before + /// calling this. + fn new_inclusive(low: B1, high: B2) -> Self + where + B1: SampleBorrow + Sized, + B2: SampleBorrow + Sized; + + /// Sample a value. + fn sample(&self, rng: &mut R) -> Self::X; + + /// Sample a single value uniformly from a range with inclusive lower bound + /// and exclusive upper bound `[low, high)`. + /// + /// By default this is implemented using + /// `UniformSampler::new(low, high).sample(rng)`. However, for some types + /// more optimal implementations for single usage may be provided via this + /// method (which is the case for integers and floats). + /// Results may not be identical. + /// + /// Note that to use this method in a generic context, the type needs to be + /// retrieved via `SampleUniform::Sampler` as follows: + /// ``` + /// use rand::{thread_rng, distributions::uniform::{SampleUniform, UniformSampler}}; + /// # #[allow(unused)] + /// fn sample_from_range(lb: T, ub: T) -> T { + /// let mut rng = thread_rng(); + /// ::Sampler::sample_single(lb, ub, &mut rng) + /// } + /// ``` + fn sample_single(low: B1, high: B2, rng: &mut R) -> Self::X + where + B1: SampleBorrow + Sized, + B2: SampleBorrow + Sized, + { + let uniform: Self = UniformSampler::new(low, high); + uniform.sample(rng) + } + + fn new_fn() -> i32; + + /// Sample a single value uniformly from a range with inclusive lower bound + /// and inclusive upper bound `[low, high]`. + /// + /// By default this is implemented using + /// `UniformSampler::new_inclusive(low, high).sample(rng)`. However, for + /// some types more optimal implementations for single usage may be provided + /// via this method. + /// Results may not be identical. + fn sample_single_inclusive(low: B1, high: B2, rng: &mut R) + -> Self::X + where B1: SampleBorrow + Sized, + B2: SampleBorrow + Sized + { + let uniform: Self = UniformSampler::new_inclusive(low, high); + uniform.sample(rng) + } +} + +impl UniformSampler for UniformChar { + type X = char; + + #[inline] // if the range is constant, this helps LLVM to do the + // calculations at compile-time. + fn new(low_b: B1, high_b: B2) -> Self + where + B1: SampleBorrow + Sized, + B2: SampleBorrow + Sized, + { + let low = char_to_comp_u32(*low_b.borrow()); + let high = char_to_comp_u32(*high_b.borrow()); + let sampler = UniformInt::::new(low, high); + UniformChar { sampler } + } + + #[inline] // if the range is constant, this helps LLVM to do the + // calculations at compile-time. + fn new_inclusive(low_b: B1, high_b: B2) -> Self + where + B1: SampleBorrow + Sized, + B2: SampleBorrow + Sized, + { + let low = char_to_comp_u32(*low_b.borrow()); + let high = char_to_comp_u32(*high_b.borrow()); + let sampler = UniformInt::::new_inclusive(low, high); + UniformChar { sampler } + } + + fn sample(&self, rng: &mut R) -> Self::X { + let mut x = self.sampler.sample(rng); + if x >= CHAR_SURROGATE_START { + x += CHAR_SURROGATE_LEN; + } + // SAFETY: x must not be in surrogate range or greater than char::MAX. + // This relies on range constructors which accept char arguments. + // Validity of input char values is assumed. + unsafe { core::char::from_u32_unchecked(x) } + } +} + +mod MyModule { + ///module function + fn module_fn() { + let a = 100; + } + + struct MyStruct { + mana: i32, + name: String, + } +} + +mod another_module; + +fn yes () {} diff --git a/tooling/doc_generator/input_files/struct_example.nr b/tooling/doc_generator/input_files/struct_example.nr new file mode 100644 index 00000000000..a4d4cacf5c6 --- /dev/null +++ b/tooling/doc_generator/input_files/struct_example.nr @@ -0,0 +1,5 @@ +///struct +struct MyStruct { + mana: i32, + name: String, +} \ No newline at end of file diff --git a/tooling/doc_generator/src/getters.rs b/tooling/doc_generator/src/getters.rs new file mode 100644 index 00000000000..15879997d01 --- /dev/null +++ b/tooling/doc_generator/src/getters.rs @@ -0,0 +1,398 @@ +use std::{fs::File, io::{BufReader, BufRead, Read}}; + +use askama::Template; +use noirc_frontend::{lexer::Lexer, token::{SpannedToken, Token, DocComments, Keyword}, hir::resolution::errors::Span}; + +use crate::{Function, Output}; + +pub(crate) fn get_module_content(tokens: &[Token], index: usize) -> Vec { + let mut content = Vec::new(); + let mut i = index; + let mut brace_counter = 0; + + + + loop { + match &tokens[i] { + Token::Semicolon => { + let filename = format!("input_files/{}.nr", tokens[i - 1]); + content = get_doc(&filename).unwrap(); + break; + } + Token::LeftBrace => { + brace_counter += 1; + i += 1; + while brace_counter != 0 { + match &tokens[i] { + Token::LeftBrace => { + brace_counter += 1; + content.push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); + i += 1; + } + Token::RightBrace => { + brace_counter -= 1; + content.push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); + i += 1; + } + _ => { + content.push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); + i += 1; + } + } + } + break; + } + _ => { + i += 1; + } + }; + } + + let res = Output::to_output(content); + + res +} + +pub(crate) fn skip_impl_block(tokens: &[Token], index: usize) -> usize { + let mut brace_counter = 0; + let mut i = index; + + while brace_counter != 1 { + match &tokens[i] { + Token::LeftBrace => { + i += 1; + brace_counter += 1; + } + _ => { + i += 1; + } + } + } + + while brace_counter != 0 { + match &tokens[i] { + Token::LeftBrace => { + i += 1; + brace_counter += 1; + } + Token::RightBrace => { + i += 1; + brace_counter -= 1; + } + _ => { + i += 1; + } + } + } + + i - index - 1 +} + +pub(crate) fn fn_signature(tokens: &[Token], index: usize) -> String { + let mut res = String::new(); + let mut i = index; + loop { + match &tokens[i] { + Token::LeftBrace | Token::Semicolon => { + break; + } + _ => { + res.push_str(&tokens[i].to_string()); + res.push_str(" "); + i += 1; + } + }; + } + res +} + +pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { + let mut res = String::new(); + let mut i = index; + let mut is_private = true; + + loop { + match &tokens[i + 1] { + Token::LeftBrace => { + res.push_str("{"); + res.push_str("\n"); + loop { + match tokens[i + 1] { + Token::RightBrace => { + if is_private { + res.push_str("/* private fields */"); + } + res.push_str("\n"); + res.push_str("}"); + break; + } + Token::Keyword(Keyword::Pub) => { + is_private = false; + loop { + match tokens[i + 1] { + Token::Comma => { + if tokens[i + 2] == Token::RightBrace { + res.push_str(","); + } + else { + res.push_str(",\n"); + } + i += 1; + break; + } + Token::RightBrace => { + break; + } + _ => { + res.push_str(&tokens[i + 1].to_string()); + res.push_str(" "); + i += 1; + } + } + } + } + _ => { i += 1; } + } + } + break; + } + _ => { + res.push_str(&tokens[i + 1].to_string()); + res.push_str(" "); + i += 1; + } + }; + } + + res +} + +pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec, Vec) { + let mut sign = String::new(); + let mut required_methods = Vec::new(); + let mut provided_methods = Vec::new(); + let mut i = index; + let mut brace_counter; + + loop { + match &tokens[i + 1] { + Token::LeftBrace => { + sign.push_str("{"); + sign.push_str("\n"); + loop { + match tokens[i + 1] { + Token::RightBrace => { + sign.push_str("}"); + break; + } + Token::Keyword(Keyword::Fn) => { + let name = match &tokens[i + 2] { + Token::Ident(idn) => { + idn.clone() + } + _ => {break;} + }; + let doc = doc(&tokens, i + 1); + let fn_sign = fn_signature(&tokens, i + 1); + + loop { + match tokens[i + 1] { + Token::Semicolon => { + required_methods.push(Function { name, doc, signature: fn_sign, is_method: true }); + sign.push_str(";"); + sign.push_str("\n"); + break; + } + Token::LeftBrace => { + provided_methods.push(Function { name, doc, signature: fn_sign, is_method: true }); + brace_counter = 1; + sign.push_str("{ ... }"); + sign.push_str("\n"); + while brace_counter != 0 { + i += 1; + match tokens[i + 1] { + Token::LeftBrace => { + brace_counter +=1; + } + Token::RightBrace => { + brace_counter -=1; + } + _ => {} + } + } + i +=1; + break; + } + _ => { + sign.push_str(&tokens[i + 1].to_string()); + sign.push_str(" "); + i += 1; + } + } + } + } + _ => { i += 1; } + } + } + break; + } + _ => { + sign.push_str(&tokens[i + 1].to_string()); + sign.push_str(" "); + i += 1; + } + }; + } + + (sign, required_methods, provided_methods) +} + +pub(crate) fn additional_doc(tokens: &[Token], index: usize) -> String { + let res = match &tokens[index - 1] { + Token::DocComment(DocComments::Outer(dc)) => { + let mut res = dc.to_string(); + let mut doc_end = true; + let mut iter = 2; + while doc_end && ((index as i32) - (iter as i32)) >= 0 { + match &tokens[index - iter] { + Token::DocComment(DocComments::Outer(doc)) => { + res.insert_str(0, &doc.to_string()); + iter += 1; + } + _ => { + doc_end = false; + } + } + } + res + } + _ => { + let mut res = String::new(); + + let mut doc_find = true; + let mut iter = 2; + while doc_find && ((index as i32) - (iter as i32)) >= 0 { + match &tokens[index - iter] { + Token::DocComment(DocComments::Outer(doc)) => { + res.insert_str(0, &doc.to_string()); + iter += 1; + } + Token::Keyword(Keyword::Fn) | Token::Keyword(Keyword::Mod) | + Token::Keyword(Keyword::Struct) | Token::Keyword(Keyword::Trait) | + Token::Keyword(Keyword::Impl) => { + doc_find = false; + } + _ => { iter += 1; } + } + } + res + } + }; + res +} + +pub(crate) fn doc(tokens: &[Token], index: usize) -> String { + if index == 0 { + return String::new(); + } + let res = match &tokens[index - 1] { + Token::DocComment(DocComments::Single(dc)) | + Token::DocComment(DocComments::Block(dc)) => { + let mut res = dc.to_string(); + let mut doc_end = true; + let mut iter = 2; + while doc_end && ((index as i32) - (iter as i32)) >= 0 { + match &tokens[index - iter] { + Token::DocComment(DocComments::Single(doc)) | + Token::DocComment(DocComments::Block(doc)) => { + res.insert_str(0, &doc.to_string()); + iter += 1; + } + _ => { + doc_end = false; + } + } + } + res + } + _ => { + let mut res = String::new(); + + let mut doc_find = true; + let mut iter = 2; + while doc_find && ((index as i32) - (iter as i32)) >= 0 { + match &tokens[index - iter] { + Token::DocComment(DocComments::Single(doc)) | + Token::DocComment(DocComments::Block(doc)) => { + res.insert_str(0, &doc.to_string()); + iter += 1; + } + Token::Keyword(Keyword::Fn) | Token::Keyword(Keyword::Mod) | + Token::Keyword(Keyword::Struct) | Token::Keyword(Keyword::Trait) | + Token::Keyword(Keyword::Impl) => { + doc_find = false; + } + _ => { iter += 1; } + } + } + res + } + }; + res +} + +pub(crate) fn outer_doc(tokens: &[Token], index: usize) -> (String, usize) { + let mut i = index; + let mut res = tokens[i].to_string(); + let mut doc_find = true; + while doc_find { + match &tokens[i + 1] { + Token::DocComment(DocComments::Outer(doc)) => { + res.push_str(doc); + i += 1; + } + _ => { doc_find = false; } + } + } + + (res, i) +} + +pub(crate) fn get_doc(input_file: &str) -> Result, Box> { + let mut file = File::open(input_file)?; + let mut contents = String::new(); + file.read_to_string(&mut contents)?; + + let mut lexer = Lexer::new(&contents); + lexer = lexer.skip_comments(false); + + let token = lexer.into_iter().map(|a| a.unwrap()).collect::>(); + + Ok(token) +} + +#[derive(Template)] +#[template(path = "code_template.html")] +pub(crate) struct Code { + pub(crate) codelines: Vec, +} + +#[derive(Debug)] +pub(crate) struct CodeLine { + number: u32, + text: String, +} + +pub(crate) fn get_text(input_file: &str) -> Result, Box> { + let file = File::open(input_file)?; + let reader = BufReader::new(file); + let mut code = Vec::new(); + let mut i = 0; + + for line in reader.lines() { + i += 1; + code.push(CodeLine{ number: i, text: line? }); + } + + Ok(code) +} diff --git a/tooling/doc_generator/src/main.rs b/tooling/doc_generator/src/main.rs new file mode 100644 index 00000000000..1875a9bac13 --- /dev/null +++ b/tooling/doc_generator/src/main.rs @@ -0,0 +1,53 @@ +mod getters; +mod output; +mod pages_generation; +mod tests; + +use std::collections::HashMap; +use getters::*; +use output::*; +use pages_generation::*; + +/// the main function of the program +/// generates all documentation files +/// the input file is a file with a Noir code +pub fn generate_doc(input_file: &str) -> Result<(), Box> { + let doc = get_doc(input_file).unwrap(); + + let tokens = Output::to_output(doc); + + let filename = extract_filename(input_file).unwrap().to_string(); + + let out = AllOutput{ all_output: tokens.clone(), filename }; + + generate_module_page(out)?; + + Ok(()) +} + +#[derive(Debug, PartialEq, Eq)] +pub struct Map { + map: HashMap, +} + +/// returns all necessary information for generating documentation +/// the input file is a file with a Noir code +pub fn get_map(input_file: &str) -> Map { + let mut map = HashMap::new(); + + let doc = get_doc(input_file).unwrap(); + + let tokens = Output::to_output(doc); + + for token in tokens.iter() { + map.insert(token.information.clone(), token.doc.clone()); + } + + Map { map } +} + +fn main() { + generate_doc("input_files/prog.nr").unwrap(); + + dbg!(get_map("input_files/struct_example.nr")); +} diff --git a/tooling/doc_generator/src/output.rs b/tooling/doc_generator/src/output.rs new file mode 100644 index 00000000000..7b3add70e18 --- /dev/null +++ b/tooling/doc_generator/src/output.rs @@ -0,0 +1,255 @@ +use std::fmt; + +use noirc_frontend::token::{Token, Keyword, DocComments, SpannedToken}; + +use crate::{Function, Implementation, doc, fn_signature, struct_signature, additional_doc, skip_impl_block, trait_info, get_module_content, outer_doc}; + +#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)] +pub(crate) enum Type { + Function, + Module, + Struct, + Trait, + OuterComment, +} + +impl fmt::Display for Type { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Type::Function => write!(f, "Function"), + Type::Module => write!(f, "Module"), + Type::Struct => write!(f, "Struct"), + Type::Trait => write!(f, "Trait"), + Type::OuterComment => write!(f, "OuterComment"), + } + } +} + +#[derive(Debug, Clone, Eq, Hash, PartialEq)] +pub(crate) enum Info { + Function{ + signature: String, + }, + Module{ + content: Vec, + }, + Struct { + signature: String, + additional_doc: String, + implementations: Vec, + }, + Trait { + signature: String, + additional_doc: String, + required_methods: Vec, + provided_methods: Vec, + implementations: Vec, + }, + Blanc, +} + +impl Info { + pub(crate) fn get_signature(&self) -> Option { + match self { + Info::Function { signature } => { + Some(signature.to_string()) + }, + Info::Struct { signature, .. } => { + Some(signature.to_string()) + } + Info::Trait { signature, .. } => { + Some(signature.to_string()) + } + _ => { + None + } + } + } + + pub(crate) fn get_implementations(&self) -> Option> { + match self { + Info::Struct { implementations, .. } => { + Some(implementations.clone()) + } + Info::Trait { implementations, .. } => { + Some(implementations.clone()) + } + _ => { + None + } + } + } + + pub(crate) fn get_additional_doc(&self) -> Option { + match self { + Info::Struct { additional_doc, .. } => { + Some(additional_doc.to_string()) + } + Info::Trait { additional_doc, .. } => { + Some(additional_doc.to_string()) + } + _ => { + None + } + } + } + + pub(crate) fn get_required_methods(&self) -> Option> { + match self { + Info::Trait { required_methods, .. } => { + Some(required_methods.clone()) + } + _ => { + None + } + } + } + + pub(crate) fn get_provided_methods(&self) -> Option> { + match self { + Info::Trait { provided_methods, .. } => { + Some(provided_methods.clone()) + } + _ => { + None + } + } + } + + pub(crate) fn get_content(&self) -> Option> { + match self { + Info::Module { content } => { + Some(content.clone()) + } + _ => { + None + } + } + } +} + +#[derive(Debug, Clone, Eq, PartialEq, Hash)] +pub(crate) struct Output { + pub(crate) r#type: Type, + pub(crate) name: String, + pub(crate) doc: String, + pub(crate) information: Info, +} + +impl Output { + pub(crate) fn to_output(input: Vec) -> Vec { + let mut res = Vec::new(); + let tokens = input.into_iter().map(|x| x.into_token()).collect::>(); + let mut is_first = true; + let mut skip_count = 0; + + for i in 0..tokens.len() { + if skip_count > 0 { + skip_count -= 1; + continue; + } + let out = match &tokens[i] { + Token::Keyword(Keyword::Fn) => { + let r#type = Type::Function; + let name = match &tokens[i + 1] { + Token::Ident(idn) => { + idn.clone() + } + _ => {continue;} + }; + let doc = doc(&tokens, i); + let sign = fn_signature(&tokens, i); + + Output{r#type, name, doc, information: Info::Function { signature: sign }} + } + Token::Keyword(Keyword::Struct) => { + let r#type = Type::Struct; + let name = match &tokens[i + 1] { + Token::Ident(idn) => { + idn.clone() + } + _ => {continue;} + }; + let doc = doc(&tokens, i); + let sign = struct_signature(&tokens, i - 1); + let ad_doc = additional_doc(&tokens, i); + + Output{r#type, name: name.clone(), doc, information: Info::Struct { signature: sign, additional_doc: ad_doc, implementations: Implementation::get_implementations(&tokens, i, name) }} + } + Token::Keyword(Keyword::Trait) => { + skip_count = skip_impl_block(&tokens, i); + + let r#type = Type::Trait; + let name = match &tokens[i + 1] { + Token::Ident(idn) => { + idn.clone() + } + _ => {continue;} + }; + let doc = doc(&tokens, i); + + let ad_doc = additional_doc(&tokens, i); + let impls = Implementation::get_implementations(&tokens, i, name.clone()); + let info = trait_info(&tokens, i); + + Output{r#type, name, doc, information: Info::Trait { signature: info.0, additional_doc: ad_doc, required_methods: info.1, provided_methods: info.2, implementations: impls }} + } + Token::Keyword(Keyword::Mod) => { + if tokens[i + 2] == Token::LeftBrace { + skip_count = skip_impl_block(&tokens, i); + } + + let r#type = Type::Module; + let name = match &tokens[i + 1] { + Token::Ident(idn) => { + idn.clone() + } + _ => {continue;} + }; + let doc = doc(&tokens, i); + let content = get_module_content(&tokens, i); + + Output{r#type, name, doc, information: Info::Module { content }} + } + Token::DocComment(DocComments::Outer(_)) => { + let r#type = Type::OuterComment; + let name = "".to_string(); + + let res = outer_doc(&tokens, i); + + let doc = if is_first { + is_first = false; + res.0 + } + else { + if res.1 == i { + is_first = true; + } + "".to_string() + }; + + + Output{r#type, name, doc, information: Info::Blanc} + } + Token::Keyword(Keyword::Impl) => { + skip_count = skip_impl_block(&tokens, i); + continue; + } + _ => {continue;} + }; + + res.push(out); + } + + res + } +} + +impl fmt::Display for Output { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "Type: {:?}\n", self.r#type)?; + write!(f, "Name: {}\n", self.name)?; + write!(f, "Doc: {}\n", self.doc)?; + Ok(()) + } +} diff --git a/tooling/doc_generator/src/pages_generation.rs b/tooling/doc_generator/src/pages_generation.rs new file mode 100644 index 00000000000..df7d2609aff --- /dev/null +++ b/tooling/doc_generator/src/pages_generation.rs @@ -0,0 +1,277 @@ +use std::{fs::{File, self}, io::Write, path::Path}; + +use askama::Template; +use noirc_frontend::token::{Token, Keyword}; + +use crate::{Type, Output, fn_signature, doc, Code, get_text}; + +fn generate_code_page(input_file: &str) -> Result<(), Box> { + let codelines = get_text(input_file)?; + + let code = Code{ codelines }; + + let rendered_html = code.render().unwrap(); + + let fname = format!("generated_doc/codepage_{}.html", extract_filename(input_file).unwrap()); + + let mut file = File::create(fname)?; + file.write_all(rendered_html.as_bytes())?; + + Ok(()) +} + +#[derive(Debug, Clone, Template, Eq, Hash, PartialEq)] +#[template(path = "func_template.html")] +pub(crate) struct Function { + pub(crate) name: String, + pub(crate) doc: String, + pub(crate) signature: String, + pub(crate) is_method: bool, +} + +fn generate_function_pages(func: Function) -> Result<(), Box> { + if func.is_method { + return Ok(()); + } + let rendered_html = func.render().unwrap(); + + let output_file_name = format!("generated_doc/{}.html", func.name); + + let mut file = File::create(output_file_name)?; + file.write_all(rendered_html.as_bytes())?; + + Ok(()) +} + +#[derive(Debug, Template)] +#[template(path = "struct_template.html")] +pub(crate) struct Structure { + name: String, + doc: String, + additional_doc: String, + signature: String, + implementations: Vec, +} + +#[derive(Debug, Clone, Eq, Hash, PartialEq)] +pub(crate) struct Implementation { + signature: String, + functions: Vec, +} + +impl Implementation { + pub(crate) fn get_implementations(tokens: &[Token], index: usize, orig_name: String) -> Vec { + let mut res = Vec::new(); + let mut functions = Vec::new(); + let mut signature = String::new(); + let mut right_impl = false; + let mut i = index; + let mut brace_counter = 0; + + while i < tokens.len() { + match tokens[i] { + Token::Keyword(Keyword::Impl) => { + loop { + match &tokens[i] { + Token::Ident(name) => { + if name == &orig_name { + right_impl = true; + } + signature.push_str(&tokens[i].to_string()); + signature.push_str(" "); + i +=1; + } + Token::LeftBrace => { + if !right_impl { + signature = "".to_string(); + break; + } + else { + brace_counter += 1; + i += 1; + while brace_counter != 0 { + match &tokens[i] { + Token::Keyword(Keyword::Fn) => { + let name = match &tokens[i + 1] { + Token::Ident(idn) => { + idn.clone() + } + _ => {continue;} + }; + let doc = doc(&tokens, i); + let sign = fn_signature(&tokens, i); + + functions.push(Function{ name, doc, signature: sign, is_method: true }); + + i += 1; + } + Token::LeftBrace => { + i += 1; + brace_counter += 1; + } + Token::RightBrace => { + i += 1; + brace_counter -= 1; + } + _ => { + i += 1; + } + } + } + + res.push(Implementation { signature: signature.clone(), functions: functions.clone() }); + signature = "".to_string(); + functions = vec![]; + break; + } + } + _ => { + signature.push_str(&tokens[i].to_string()); + signature.push_str(" "); + i +=1; + } + } + } + } + _ => {i += 1;} + } + } + + res + } +} + +fn generate_structure_pages(structure: Structure) -> Result<(), Box> { + let rendered_html = structure.render().unwrap(); + + let output_file_name = format!("generated_doc/{}.html", structure.name); + + let mut file = File::create(output_file_name)?; + file.write_all(rendered_html.as_bytes())?; + + Ok(()) +} + +#[derive(Debug, Template)] +#[template(path = "trait_template.html")] +pub(crate) struct Trait { + name: String, + doc: String, + signature: String, + additional_doc: String, + required_methods: Vec, + provided_methods: Vec, + implementations: Vec, +} + +fn generate_trait_pages(r#trait: Trait) -> Result<(), Box> { + let rendered_html = r#trait.render().unwrap(); + + let output_file_name = format!("generated_doc/{}.html", r#trait.name); + + let mut file = File::create(output_file_name)?; + file.write_all(rendered_html.as_bytes())?; + + Ok(()) +} + +#[derive(Debug, Template)] +#[template(path = "doc_template.html")] +pub(crate) struct AllOutput { + pub(crate) all_output: Vec, + pub(crate) filename: String, +} + +#[derive(Debug, Template)] +#[template(path = "search_results_template.html")] +pub(crate) struct SearchResults { + results: Vec +} + +fn generate_search_page(res: SearchResults, module_name: String) -> Result<(), Box> { + let rendered_html = res.render().unwrap(); + + let filename = format!("generated_doc/search_results_{}.html", module_name); + + let mut file = File::create(filename)?; + file.write_all(rendered_html.as_bytes())?; + + Ok(()) +} + +pub(crate) fn extract_filename(filename_with_path: &str) -> Option<&str> { + let path = Path::new(filename_with_path); + match path.file_stem() { + Some(file_stem) => file_stem.to_str(), + None => None, + } +} + +pub(crate) fn generate_module_page(module: AllOutput) -> Result<(), Box> { + let rendered_html = module.render().unwrap(); + + let fname = format!("generated_doc/{}.html", module.filename); + + let mut file = File::create(fname)?; + file.write_all(rendered_html.as_bytes())?; + + let fname = format!("input_files/{}.nr", module.filename); + + if fs::metadata(&fname).is_ok() { + generate_code_page(&fname)?; + } + + let res = SearchResults{ results: module.all_output.clone() }; + + generate_search_page(res, module.filename)?; + + for i in module.all_output.iter() { + match i.r#type { + Type::Function => { + generate_function_pages( + Function { + name: i.name.clone(), + doc: i.doc.clone(), + signature: i.information.get_signature().unwrap(), + is_method: false, + } + )?; + } + Type::Struct => { + generate_structure_pages( + Structure { + name: i.name.clone(), + doc: i.doc.clone(), + additional_doc: i.information.get_additional_doc().unwrap(), + signature: i.information.get_signature().unwrap(), + implementations: i.information.get_implementations().unwrap() + } + )?; + } + Type::Trait => { + generate_trait_pages( + Trait { + name: i.name.clone(), + doc: i.doc.clone(), + signature: i.information.get_signature().unwrap(), + additional_doc: i.information.get_additional_doc().unwrap(), + required_methods: i.information.get_required_methods().unwrap(), + provided_methods: i.information.get_provided_methods().unwrap(), + implementations: i.information.get_implementations().unwrap() + } + )?; + } + Type::Module => { + generate_module_page( + AllOutput { + all_output: i.information.get_content().unwrap(), + filename: i.name.clone() + } + )?; + } + _ => {} + } + } + + Ok(()) +} diff --git a/tooling/doc_generator/src/tests.rs b/tooling/doc_generator/src/tests.rs new file mode 100644 index 00000000000..6a27861ba00 --- /dev/null +++ b/tooling/doc_generator/src/tests.rs @@ -0,0 +1,46 @@ +#[cfg(test)] +mod tests { + use std::collections::HashMap; + + use crate::{generate_doc, Info, get_map, Map}; + + #[test] + fn one_file() { + assert!(generate_doc("input_files/another_module.nr").is_ok()); + } + + #[test] + fn many_files() { + assert!(generate_doc("input_files/prog.nr").is_ok()); + } + + #[test] + fn function_output() { + let mut map = HashMap::new(); + map.insert(Info::Function { signature: "fn main ( x : Field , y : pub Field ) ".to_string() }, "doc comment".to_string()); + + let result = Map { + map + }; + + assert_eq!(get_map("input_files/function_example.nr"), result); + } + + #[test] + fn structure_output() { + let mut map = HashMap::new(); + map.insert( + Info::Struct { + signature: "struct MyStruct {\n/* private fields */\n}".to_string(), + additional_doc: "".to_string(), + implementations: vec![] + }, + "struct".to_string()); + + let result = Map { + map + }; + + assert_eq!(get_map("input_files/struct_example.nr"), result); + } +} diff --git a/tooling/doc_generator/templates/code_template.html b/tooling/doc_generator/templates/code_template.html new file mode 100644 index 00000000000..19d6f8539a7 --- /dev/null +++ b/tooling/doc_generator/templates/code_template.html @@ -0,0 +1,54 @@ + + + + Code Page + + + +

+
+ + + + + + + {% for code_line in codelines %} + + + + + {% endfor %} + +
{{ code_line.number }}{{ code_line.text }}
+
+
+ + diff --git a/tooling/doc_generator/templates/doc_template.html b/tooling/doc_generator/templates/doc_template.html new file mode 100644 index 00000000000..42ce0127a89 --- /dev/null +++ b/tooling/doc_generator/templates/doc_template.html @@ -0,0 +1,225 @@ + + + + + Main Page + + + + + + +
+
+

+ Module {{filename}} + source +

+ {% for output in all_output %} + {% if output.type == Type::OuterComment %} +

{{output.doc}}

+ {% endif %} + {% endfor %} +
+

Functions

+
+ + + + + + + {% for output in all_output %} + {% if output.type == Type::Function %} + + + + + {% endif %} + {% endfor %} + +
{{output.doc}}
+ +

Modules

+
+ + + + + + + {% for output in all_output %} + {% if output.type == Type::Module %} + + + + + {% endif %} + {% endfor %} + +
{{output.doc}}
+ +

Structs

+
+ + + + + + + {% for output in all_output %} + {% if output.type == Type::Struct %} + + + + + {% endif %} + {% endfor %} + +
{{output.doc}}
+ +

Traits

+
+ + + + + + + {% for output in all_output %} + {% if output.type == Type::Trait %} + + + + + {% endif %} + {% endfor %} + +
{{output.doc}}
+
+ + + + + + + \ No newline at end of file diff --git a/tooling/doc_generator/templates/func_template.html b/tooling/doc_generator/templates/func_template.html new file mode 100644 index 00000000000..50903c005b3 --- /dev/null +++ b/tooling/doc_generator/templates/func_template.html @@ -0,0 +1,83 @@ + + + + {{ name }} + + + +
+

+ Function {{name}} +

+
{{signature}}
+

{{ doc }}

+
+ + \ No newline at end of file diff --git a/tooling/doc_generator/templates/search_results_template.html b/tooling/doc_generator/templates/search_results_template.html new file mode 100644 index 00000000000..c0473bfe8da --- /dev/null +++ b/tooling/doc_generator/templates/search_results_template.html @@ -0,0 +1,140 @@ + + + + Search results + + + +

Search results

+
+ +
+ +
+ + + {% for result in results %} + {% if result.type == Type::Struct || + result.type == Type::Function || + result.type == Type::Trait %} + + + + + + {% endif %} + {% endfor %} + +
{{result.name}}{{result.type}}{{result.doc}}
+
+ + + + diff --git a/tooling/doc_generator/templates/struct_template.html b/tooling/doc_generator/templates/struct_template.html new file mode 100644 index 00000000000..ac2a8a90808 --- /dev/null +++ b/tooling/doc_generator/templates/struct_template.html @@ -0,0 +1,111 @@ + + + + + {{ name }} + + + + +
+

Structure {{ name }}

+
{{ signature }}
+

{{ doc }}

+
+ +
+

Documentation

+
+

{{ additional_doc }}

+
+ +
+

Implementations

+
+
    + {% for implementation in implementations %} +
  • {{ implementation.signature }}
  • +
      + {% for func in implementation.functions %} +
    • {{ func.signature }}
    • + {{ func.doc }} + {% endfor %} +
    + {% endfor %} +
+
+ + + \ No newline at end of file diff --git a/tooling/doc_generator/templates/trait_template.html b/tooling/doc_generator/templates/trait_template.html new file mode 100644 index 00000000000..b654153aa3e --- /dev/null +++ b/tooling/doc_generator/templates/trait_template.html @@ -0,0 +1,131 @@ + + + + + {{ name }} + + + +
+

Trait {{ name }}

+
{{ signature }}
+

{{ doc }}

+
+ +
+

Documentation

+
+

{{ additional_doc }}

+
+ +
+

Required methods

+
+
    + {% for method in required_methods %} +
  • {{ method.signature }}
  • + {{ method.doc }} + {% endfor %} +
+
+ +
+

Provided methods

+
+
    + {% for method in provided_methods %} +
  • {{ method.signature }}
  • + {{ method.doc }} + {% endfor %} +
+
+ +
+

Implementors

+
+
    + {% for implementation in implementations %} +
  • {{ implementation.signature }}
  • +
      + {% for func in implementation.functions %} +
    • {{ func.signature }}
    • + {% endfor %} +
    + {% endfor %} +
+
+ + From 9c9d53b438b7455c9ef7ca457e6077d6727e779b Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Mon, 30 Oct 2023 08:25:30 +0200 Subject: [PATCH 02/19] fmt --- tooling/doc_generator/src/getters.rs | 104 +++++--- tooling/doc_generator/src/main.rs | 4 +- tooling/doc_generator/src/output.rs | 139 +++++------ tooling/doc_generator/src/pages_generation.rs | 222 +++++++++--------- tooling/doc_generator/src/tests.rs | 30 +-- 5 files changed, 265 insertions(+), 234 deletions(-) diff --git a/tooling/doc_generator/src/getters.rs b/tooling/doc_generator/src/getters.rs index 15879997d01..e7679f140db 100644 --- a/tooling/doc_generator/src/getters.rs +++ b/tooling/doc_generator/src/getters.rs @@ -1,7 +1,14 @@ -use std::{fs::File, io::{BufReader, BufRead, Read}}; +use std::{ + fs::File, + io::{BufRead, BufReader, Read}, +}; use askama::Template; -use noirc_frontend::{lexer::Lexer, token::{SpannedToken, Token, DocComments, Keyword}, hir::resolution::errors::Span}; +use noirc_frontend::{ + hir::resolution::errors::Span, + lexer::Lexer, + token::{DocComments, Keyword, SpannedToken, Token}, +}; use crate::{Function, Output}; @@ -10,8 +17,6 @@ pub(crate) fn get_module_content(tokens: &[Token], index: usize) -> Vec let mut i = index; let mut brace_counter = 0; - - loop { match &tokens[i] { Token::Semicolon => { @@ -26,16 +31,19 @@ pub(crate) fn get_module_content(tokens: &[Token], index: usize) -> Vec match &tokens[i] { Token::LeftBrace => { brace_counter += 1; - content.push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); + content + .push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); i += 1; } Token::RightBrace => { brace_counter -= 1; - content.push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); + content + .push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); i += 1; } _ => { - content.push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); + content + .push(SpannedToken::new(tokens[i].clone(), Span::inclusive(0, 1))); i += 1; } } @@ -133,8 +141,7 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { Token::Comma => { if tokens[i + 2] == Token::RightBrace { res.push_str(","); - } - else { + } else { res.push_str(",\n"); } i += 1; @@ -151,7 +158,9 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { } } } - _ => { i += 1; } + _ => { + i += 1; + } } } break; @@ -187,10 +196,10 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec { let name = match &tokens[i + 2] { - Token::Ident(idn) => { - idn.clone() + Token::Ident(idn) => idn.clone(), + _ => { + break; } - _ => {break;} }; let doc = doc(&tokens, i + 1); let fn_sign = fn_signature(&tokens, i + 1); @@ -198,13 +207,23 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec { - required_methods.push(Function { name, doc, signature: fn_sign, is_method: true }); + required_methods.push(Function { + name, + doc, + signature: fn_sign, + is_method: true, + }); sign.push_str(";"); sign.push_str("\n"); break; } Token::LeftBrace => { - provided_methods.push(Function { name, doc, signature: fn_sign, is_method: true }); + provided_methods.push(Function { + name, + doc, + signature: fn_sign, + is_method: true, + }); brace_counter = 1; sign.push_str("{ ... }"); sign.push_str("\n"); @@ -212,15 +231,15 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec { - brace_counter +=1; + brace_counter += 1; } Token::RightBrace => { - brace_counter -=1; + brace_counter -= 1; } _ => {} } } - i +=1; + i += 1; break; } _ => { @@ -231,7 +250,9 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec { i += 1; } + _ => { + i += 1; + } } } break; @@ -268,7 +289,7 @@ pub(crate) fn additional_doc(tokens: &[Token], index: usize) -> String { } _ => { let mut res = String::new(); - + let mut doc_find = true; let mut iter = 2; while doc_find && ((index as i32) - (iter as i32)) >= 0 { @@ -277,12 +298,16 @@ pub(crate) fn additional_doc(tokens: &[Token], index: usize) -> String { res.insert_str(0, &doc.to_string()); iter += 1; } - Token::Keyword(Keyword::Fn) | Token::Keyword(Keyword::Mod) | - Token::Keyword(Keyword::Struct) | Token::Keyword(Keyword::Trait) | - Token::Keyword(Keyword::Impl) => { + Token::Keyword(Keyword::Fn) + | Token::Keyword(Keyword::Mod) + | Token::Keyword(Keyword::Struct) + | Token::Keyword(Keyword::Trait) + | Token::Keyword(Keyword::Impl) => { doc_find = false; } - _ => { iter += 1; } + _ => { + iter += 1; + } } } res @@ -296,15 +321,14 @@ pub(crate) fn doc(tokens: &[Token], index: usize) -> String { return String::new(); } let res = match &tokens[index - 1] { - Token::DocComment(DocComments::Single(dc)) | - Token::DocComment(DocComments::Block(dc)) => { + Token::DocComment(DocComments::Single(dc)) | Token::DocComment(DocComments::Block(dc)) => { let mut res = dc.to_string(); let mut doc_end = true; let mut iter = 2; while doc_end && ((index as i32) - (iter as i32)) >= 0 { match &tokens[index - iter] { - Token::DocComment(DocComments::Single(doc)) | - Token::DocComment(DocComments::Block(doc)) => { + Token::DocComment(DocComments::Single(doc)) + | Token::DocComment(DocComments::Block(doc)) => { res.insert_str(0, &doc.to_string()); iter += 1; } @@ -317,22 +341,26 @@ pub(crate) fn doc(tokens: &[Token], index: usize) -> String { } _ => { let mut res = String::new(); - + let mut doc_find = true; let mut iter = 2; while doc_find && ((index as i32) - (iter as i32)) >= 0 { match &tokens[index - iter] { - Token::DocComment(DocComments::Single(doc)) | - Token::DocComment(DocComments::Block(doc)) => { + Token::DocComment(DocComments::Single(doc)) + | Token::DocComment(DocComments::Block(doc)) => { res.insert_str(0, &doc.to_string()); iter += 1; } - Token::Keyword(Keyword::Fn) | Token::Keyword(Keyword::Mod) | - Token::Keyword(Keyword::Struct) | Token::Keyword(Keyword::Trait) | - Token::Keyword(Keyword::Impl) => { + Token::Keyword(Keyword::Fn) + | Token::Keyword(Keyword::Mod) + | Token::Keyword(Keyword::Struct) + | Token::Keyword(Keyword::Trait) + | Token::Keyword(Keyword::Impl) => { doc_find = false; } - _ => { iter += 1; } + _ => { + iter += 1; + } } } res @@ -351,7 +379,9 @@ pub(crate) fn outer_doc(tokens: &[Token], index: usize) -> (String, usize) { res.push_str(doc); i += 1; } - _ => { doc_find = false; } + _ => { + doc_find = false; + } } } @@ -391,7 +421,7 @@ pub(crate) fn get_text(input_file: &str) -> Result, Box Result<(), Box> let filename = extract_filename(input_file).unwrap().to_string(); - let out = AllOutput{ all_output: tokens.clone(), filename }; + let out = AllOutput { all_output: tokens.clone(), filename }; generate_module_page(out)?; diff --git a/tooling/doc_generator/src/output.rs b/tooling/doc_generator/src/output.rs index 7b3add70e18..66e59125e63 100644 --- a/tooling/doc_generator/src/output.rs +++ b/tooling/doc_generator/src/output.rs @@ -1,8 +1,11 @@ use std::fmt; -use noirc_frontend::token::{Token, Keyword, DocComments, SpannedToken}; +use noirc_frontend::token::{DocComments, Keyword, SpannedToken, Token}; -use crate::{Function, Implementation, doc, fn_signature, struct_signature, additional_doc, skip_impl_block, trait_info, get_module_content, outer_doc}; +use crate::{ + additional_doc, doc, fn_signature, get_module_content, outer_doc, skip_impl_block, + struct_signature, trait_info, Function, Implementation, +}; #[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)] pub(crate) enum Type { @@ -27,10 +30,10 @@ impl fmt::Display for Type { #[derive(Debug, Clone, Eq, Hash, PartialEq)] pub(crate) enum Info { - Function{ + Function { signature: String, }, - Module{ + Module { content: Vec, }, Struct { @@ -51,79 +54,47 @@ pub(crate) enum Info { impl Info { pub(crate) fn get_signature(&self) -> Option { match self { - Info::Function { signature } => { - Some(signature.to_string()) - }, - Info::Struct { signature, .. } => { - Some(signature.to_string()) - } - Info::Trait { signature, .. } => { - Some(signature.to_string()) - } - _ => { - None - } + Info::Function { signature } => Some(signature.to_string()), + Info::Struct { signature, .. } => Some(signature.to_string()), + Info::Trait { signature, .. } => Some(signature.to_string()), + _ => None, } } pub(crate) fn get_implementations(&self) -> Option> { match self { - Info::Struct { implementations, .. } => { - Some(implementations.clone()) - } - Info::Trait { implementations, .. } => { - Some(implementations.clone()) - } - _ => { - None - } + Info::Struct { implementations, .. } => Some(implementations.clone()), + Info::Trait { implementations, .. } => Some(implementations.clone()), + _ => None, } } pub(crate) fn get_additional_doc(&self) -> Option { match self { - Info::Struct { additional_doc, .. } => { - Some(additional_doc.to_string()) - } - Info::Trait { additional_doc, .. } => { - Some(additional_doc.to_string()) - } - _ => { - None - } + Info::Struct { additional_doc, .. } => Some(additional_doc.to_string()), + Info::Trait { additional_doc, .. } => Some(additional_doc.to_string()), + _ => None, } } pub(crate) fn get_required_methods(&self) -> Option> { match self { - Info::Trait { required_methods, .. } => { - Some(required_methods.clone()) - } - _ => { - None - } + Info::Trait { required_methods, .. } => Some(required_methods.clone()), + _ => None, } } pub(crate) fn get_provided_methods(&self) -> Option> { match self { - Info::Trait { provided_methods, .. } => { - Some(provided_methods.clone()) - } - _ => { - None - } + Info::Trait { provided_methods, .. } => Some(provided_methods.clone()), + _ => None, } } pub(crate) fn get_content(&self) -> Option> { match self { - Info::Module { content } => { - Some(content.clone()) - } - _ => { - None - } + Info::Module { content } => Some(content.clone()), + _ => None, } } } @@ -152,39 +123,48 @@ impl Output { Token::Keyword(Keyword::Fn) => { let r#type = Type::Function; let name = match &tokens[i + 1] { - Token::Ident(idn) => { - idn.clone() + Token::Ident(idn) => idn.clone(), + _ => { + continue; } - _ => {continue;} }; let doc = doc(&tokens, i); let sign = fn_signature(&tokens, i); - - Output{r#type, name, doc, information: Info::Function { signature: sign }} + + Output { r#type, name, doc, information: Info::Function { signature: sign } } } Token::Keyword(Keyword::Struct) => { let r#type = Type::Struct; let name = match &tokens[i + 1] { - Token::Ident(idn) => { - idn.clone() + Token::Ident(idn) => idn.clone(), + _ => { + continue; } - _ => {continue;} }; let doc = doc(&tokens, i); let sign = struct_signature(&tokens, i - 1); let ad_doc = additional_doc(&tokens, i); - Output{r#type, name: name.clone(), doc, information: Info::Struct { signature: sign, additional_doc: ad_doc, implementations: Implementation::get_implementations(&tokens, i, name) }} + Output { + r#type, + name: name.clone(), + doc, + information: Info::Struct { + signature: sign, + additional_doc: ad_doc, + implementations: Implementation::get_implementations(&tokens, i, name), + }, + } } Token::Keyword(Keyword::Trait) => { skip_count = skip_impl_block(&tokens, i); let r#type = Type::Trait; let name = match &tokens[i + 1] { - Token::Ident(idn) => { - idn.clone() + Token::Ident(idn) => idn.clone(), + _ => { + continue; } - _ => {continue;} }; let doc = doc(&tokens, i); @@ -192,7 +172,18 @@ impl Output { let impls = Implementation::get_implementations(&tokens, i, name.clone()); let info = trait_info(&tokens, i); - Output{r#type, name, doc, information: Info::Trait { signature: info.0, additional_doc: ad_doc, required_methods: info.1, provided_methods: info.2, implementations: impls }} + Output { + r#type, + name, + doc, + information: Info::Trait { + signature: info.0, + additional_doc: ad_doc, + required_methods: info.1, + provided_methods: info.2, + implementations: impls, + }, + } } Token::Keyword(Keyword::Mod) => { if tokens[i + 2] == Token::LeftBrace { @@ -201,15 +192,15 @@ impl Output { let r#type = Type::Module; let name = match &tokens[i + 1] { - Token::Ident(idn) => { - idn.clone() + Token::Ident(idn) => idn.clone(), + _ => { + continue; } - _ => {continue;} }; let doc = doc(&tokens, i); let content = get_module_content(&tokens, i); - Output{r#type, name, doc, information: Info::Module { content }} + Output { r#type, name, doc, information: Info::Module { content } } } Token::DocComment(DocComments::Outer(_)) => { let r#type = Type::OuterComment; @@ -220,22 +211,22 @@ impl Output { let doc = if is_first { is_first = false; res.0 - } - else { + } else { if res.1 == i { is_first = true; } "".to_string() }; - - Output{r#type, name, doc, information: Info::Blanc} + Output { r#type, name, doc, information: Info::Blanc } } Token::Keyword(Keyword::Impl) => { skip_count = skip_impl_block(&tokens, i); continue; } - _ => {continue;} + _ => { + continue; + } }; res.push(out); diff --git a/tooling/doc_generator/src/pages_generation.rs b/tooling/doc_generator/src/pages_generation.rs index df7d2609aff..2e968cbab2e 100644 --- a/tooling/doc_generator/src/pages_generation.rs +++ b/tooling/doc_generator/src/pages_generation.rs @@ -1,14 +1,18 @@ -use std::{fs::{File, self}, io::Write, path::Path}; +use std::{ + fs::{self, File}, + io::Write, + path::Path, +}; use askama::Template; -use noirc_frontend::token::{Token, Keyword}; +use noirc_frontend::token::{Keyword, Token}; -use crate::{Type, Output, fn_signature, doc, Code, get_text}; +use crate::{doc, fn_signature, get_text, Code, Output, Type}; fn generate_code_page(input_file: &str) -> Result<(), Box> { let codelines = get_text(input_file)?; - let code = Code{ codelines }; + let code = Code { codelines }; let rendered_html = code.render().unwrap(); @@ -23,8 +27,8 @@ fn generate_code_page(input_file: &str) -> Result<(), Box #[derive(Debug, Clone, Template, Eq, Hash, PartialEq)] #[template(path = "func_template.html")] pub(crate) struct Function { - pub(crate) name: String, - pub(crate) doc: String, + pub(crate) name: String, + pub(crate) doc: String, pub(crate) signature: String, pub(crate) is_method: bool, } @@ -46,8 +50,8 @@ fn generate_function_pages(func: Function) -> Result<(), Box, @@ -60,7 +64,11 @@ pub(crate) struct Implementation { } impl Implementation { - pub(crate) fn get_implementations(tokens: &[Token], index: usize, orig_name: String) -> Vec { + pub(crate) fn get_implementations( + tokens: &[Token], + index: usize, + orig_name: String, + ) -> Vec { let mut res = Vec::new(); let mut functions = Vec::new(); let mut signature = String::new(); @@ -70,70 +78,77 @@ impl Implementation { while i < tokens.len() { match tokens[i] { - Token::Keyword(Keyword::Impl) => { - loop { - match &tokens[i] { - Token::Ident(name) => { - if name == &orig_name { - right_impl = true; - } - signature.push_str(&tokens[i].to_string()); - signature.push_str(" "); - i +=1; + Token::Keyword(Keyword::Impl) => loop { + match &tokens[i] { + Token::Ident(name) => { + if name == &orig_name { + right_impl = true; } - Token::LeftBrace => { - if !right_impl { - signature = "".to_string(); - break; - } - else { - brace_counter += 1; - i += 1; - while brace_counter != 0 { - match &tokens[i] { - Token::Keyword(Keyword::Fn) => { - let name = match &tokens[i + 1] { - Token::Ident(idn) => { - idn.clone() - } - _ => {continue;} - }; - let doc = doc(&tokens, i); - let sign = fn_signature(&tokens, i); - - functions.push(Function{ name, doc, signature: sign, is_method: true }); - - i += 1; - } - Token::LeftBrace => { - i += 1; - brace_counter += 1; - } - Token::RightBrace => { - i += 1; - brace_counter -= 1; - } - _ => { - i += 1; - } + signature.push_str(&tokens[i].to_string()); + signature.push_str(" "); + i += 1; + } + Token::LeftBrace => { + if !right_impl { + signature = "".to_string(); + break; + } else { + brace_counter += 1; + i += 1; + while brace_counter != 0 { + match &tokens[i] { + Token::Keyword(Keyword::Fn) => { + let name = match &tokens[i + 1] { + Token::Ident(idn) => idn.clone(), + _ => { + continue; + } + }; + let doc = doc(&tokens, i); + let sign = fn_signature(&tokens, i); + + functions.push(Function { + name, + doc, + signature: sign, + is_method: true, + }); + + i += 1; + } + Token::LeftBrace => { + i += 1; + brace_counter += 1; + } + Token::RightBrace => { + i += 1; + brace_counter -= 1; + } + _ => { + i += 1; } } - - res.push(Implementation { signature: signature.clone(), functions: functions.clone() }); - signature = "".to_string(); - functions = vec![]; - break; } - } - _ => { - signature.push_str(&tokens[i].to_string()); - signature.push_str(" "); - i +=1; + + res.push(Implementation { + signature: signature.clone(), + functions: functions.clone(), + }); + signature = "".to_string(); + functions = vec![]; + break; } } + _ => { + signature.push_str(&tokens[i].to_string()); + signature.push_str(" "); + i += 1; + } } + }, + _ => { + i += 1; } - _ => {i += 1;} } } @@ -155,8 +170,8 @@ fn generate_structure_pages(structure: Structure) -> Result<(), Box, @@ -185,10 +200,13 @@ pub(crate) struct AllOutput { #[derive(Debug, Template)] #[template(path = "search_results_template.html")] pub(crate) struct SearchResults { - results: Vec + results: Vec, } -fn generate_search_page(res: SearchResults, module_name: String) -> Result<(), Box> { +fn generate_search_page( + res: SearchResults, + module_name: String, +) -> Result<(), Box> { let rendered_html = res.render().unwrap(); let filename = format!("generated_doc/search_results_{}.html", module_name); @@ -221,53 +239,45 @@ pub(crate) fn generate_module_page(module: AllOutput) -> Result<(), Box { - generate_function_pages( - Function { - name: i.name.clone(), - doc: i.doc.clone(), - signature: i.information.get_signature().unwrap(), - is_method: false, - } - )?; - } + generate_function_pages(Function { + name: i.name.clone(), + doc: i.doc.clone(), + signature: i.information.get_signature().unwrap(), + is_method: false, + })?; + } Type::Struct => { - generate_structure_pages( - Structure { - name: i.name.clone(), - doc: i.doc.clone(), - additional_doc: i.information.get_additional_doc().unwrap(), - signature: i.information.get_signature().unwrap(), - implementations: i.information.get_implementations().unwrap() - } - )?; - } + generate_structure_pages(Structure { + name: i.name.clone(), + doc: i.doc.clone(), + additional_doc: i.information.get_additional_doc().unwrap(), + signature: i.information.get_signature().unwrap(), + implementations: i.information.get_implementations().unwrap(), + })?; + } Type::Trait => { - generate_trait_pages( - Trait { - name: i.name.clone(), - doc: i.doc.clone(), - signature: i.information.get_signature().unwrap(), - additional_doc: i.information.get_additional_doc().unwrap(), - required_methods: i.information.get_required_methods().unwrap(), - provided_methods: i.information.get_provided_methods().unwrap(), - implementations: i.information.get_implementations().unwrap() - } - )?; + generate_trait_pages(Trait { + name: i.name.clone(), + doc: i.doc.clone(), + signature: i.information.get_signature().unwrap(), + additional_doc: i.information.get_additional_doc().unwrap(), + required_methods: i.information.get_required_methods().unwrap(), + provided_methods: i.information.get_provided_methods().unwrap(), + implementations: i.information.get_implementations().unwrap(), + })?; } Type::Module => { - generate_module_page( - AllOutput { - all_output: i.information.get_content().unwrap(), - filename: i.name.clone() - } - )?; + generate_module_page(AllOutput { + all_output: i.information.get_content().unwrap(), + filename: i.name.clone(), + })?; } _ => {} } diff --git a/tooling/doc_generator/src/tests.rs b/tooling/doc_generator/src/tests.rs index 6a27861ba00..f1cfa3c07cb 100644 --- a/tooling/doc_generator/src/tests.rs +++ b/tooling/doc_generator/src/tests.rs @@ -2,7 +2,7 @@ mod tests { use std::collections::HashMap; - use crate::{generate_doc, Info, get_map, Map}; + use crate::{generate_doc, get_map, Info, Map}; #[test] fn one_file() { @@ -17,11 +17,12 @@ mod tests { #[test] fn function_output() { let mut map = HashMap::new(); - map.insert(Info::Function { signature: "fn main ( x : Field , y : pub Field ) ".to_string() }, "doc comment".to_string()); + map.insert( + Info::Function { signature: "fn main ( x : Field , y : pub Field ) ".to_string() }, + "doc comment".to_string(), + ); - let result = Map { - map - }; + let result = Map { map }; assert_eq!(get_map("input_files/function_example.nr"), result); } @@ -30,16 +31,15 @@ mod tests { fn structure_output() { let mut map = HashMap::new(); map.insert( - Info::Struct { - signature: "struct MyStruct {\n/* private fields */\n}".to_string(), - additional_doc: "".to_string(), - implementations: vec![] - }, - "struct".to_string()); - - let result = Map { - map - }; + Info::Struct { + signature: "struct MyStruct {\n/* private fields */\n}".to_string(), + additional_doc: "".to_string(), + implementations: vec![], + }, + "struct".to_string(), + ); + + let result = Map { map }; assert_eq!(get_map("input_files/struct_example.nr"), result); } From ab422847307d1c9d1c2d20e5bd568521a4790ce0 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Mon, 30 Oct 2023 11:24:06 +0200 Subject: [PATCH 03/19] fixed comment display --- tooling/doc_generator/src/getters.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tooling/doc_generator/src/getters.rs b/tooling/doc_generator/src/getters.rs index e7679f140db..0e27f1dfbe0 100644 --- a/tooling/doc_generator/src/getters.rs +++ b/tooling/doc_generator/src/getters.rs @@ -385,6 +385,12 @@ pub(crate) fn outer_doc(tokens: &[Token], index: usize) -> (String, usize) { } } + if let Some(pos) = res.find(' ') { + res = res.split_off(pos + 1); + } else { + res.clear(); + } + (res, i) } From 8bb08b149ad6580787805a696009270a8ab7230b Mon Sep 17 00:00:00 2001 From: kevaundray Date: Mon, 30 Oct 2023 11:58:48 +0000 Subject: [PATCH 04/19] chore!: Move circuit serialization circuit into acir (#3345) --- Cargo.lock | 3 +- acvm-repo/acir/Cargo.toml | 1 + acvm-repo/acir/src/circuit/mod.rs | 47 ++++++++++++++++--- .../acir/tests/test_program_serialization.rs | 21 +++------ acvm-repo/acvm_js/src/execute.rs | 3 +- acvm-repo/acvm_js/src/public_witness.rs | 9 ++-- compiler/noirc_driver/Cargo.toml | 1 - compiler/noirc_driver/src/contract.rs | 6 ++- compiler/noirc_driver/src/program.rs | 31 ++---------- compiler/wasm/src/circuit.rs | 6 +-- tooling/backend_interface/src/proof_system.rs | 16 ++----- .../backend_interface/src/smart_contract.rs | 4 +- tooling/nargo/Cargo.toml | 1 - tooling/nargo/src/artifacts/contract.rs | 4 +- tooling/nargo/src/artifacts/mod.rs | 28 ----------- tooling/nargo/src/artifacts/program.rs | 4 +- 16 files changed, 78 insertions(+), 107 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 09f2708da11..b5119d9de73 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7,6 +7,7 @@ name = "acir" version = "0.30.0" dependencies = [ "acir_field", + "base64", "bincode", "brillig", "flate2", @@ -2405,7 +2406,6 @@ name = "nargo" version = "0.18.0" dependencies = [ "acvm", - "base64", "codespan-reporting", "fm", "iter-extended", @@ -2625,7 +2625,6 @@ name = "noirc_driver" version = "0.18.0" dependencies = [ "acvm", - "base64", "build-data", "clap", "fm", diff --git a/acvm-repo/acir/Cargo.toml b/acvm-repo/acir/Cargo.toml index af6429a3a3d..871f7c514c1 100644 --- a/acvm-repo/acir/Cargo.toml +++ b/acvm-repo/acir/Cargo.toml @@ -19,6 +19,7 @@ serde.workspace = true thiserror.workspace = true flate2 = "1.0.24" bincode.workspace = true +base64.workspace = true [dev-dependencies] serde_json = "1.0" diff --git a/acvm-repo/acir/src/circuit/mod.rs b/acvm-repo/acir/src/circuit/mod.rs index 3171cb57d16..99ab389e31e 100644 --- a/acvm-repo/acir/src/circuit/mod.rs +++ b/acvm-repo/acir/src/circuit/mod.rs @@ -9,9 +9,10 @@ use thiserror::Error; use std::{io::prelude::*, num::ParseIntError, str::FromStr}; +use base64::Engine; use flate2::Compression; +use serde::{de::Error as DeserializationError, Deserialize, Deserializer, Serialize, Serializer}; -use serde::{Deserialize, Serialize}; use std::collections::BTreeSet; #[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Default)] @@ -125,7 +126,7 @@ impl Circuit { PublicInputs(public_inputs) } - pub fn write(&self, writer: W) -> std::io::Result<()> { + fn write(&self, writer: W) -> std::io::Result<()> { let buf = bincode::serialize(self).unwrap(); let mut encoder = flate2::write::GzEncoder::new(writer, Compression::default()); encoder.write_all(&buf)?; @@ -133,13 +134,46 @@ impl Circuit { Ok(()) } - pub fn read(reader: R) -> std::io::Result { + fn read(reader: R) -> std::io::Result { let mut gz_decoder = flate2::read::GzDecoder::new(reader); let mut buf_d = Vec::new(); gz_decoder.read_to_end(&mut buf_d)?; bincode::deserialize(&buf_d) .map_err(|err| std::io::Error::new(std::io::ErrorKind::InvalidInput, err)) } + + pub fn serialize_circuit(circuit: &Circuit) -> Vec { + let mut circuit_bytes: Vec = Vec::new(); + circuit.write(&mut circuit_bytes).expect("expected circuit to be serializable"); + circuit_bytes + } + + pub fn deserialize_circuit(serialized_circuit: &[u8]) -> std::io::Result { + Circuit::read(serialized_circuit) + } + + // Serialize and base64 encode circuit + pub fn serialize_circuit_base64(circuit: &Circuit, s: S) -> Result + where + S: Serializer, + { + let circuit_bytes = Circuit::serialize_circuit(circuit); + let encoded_b64 = base64::engine::general_purpose::STANDARD.encode(circuit_bytes); + s.serialize_str(&encoded_b64) + } + + // Deserialize and base64 decode circuit + pub fn deserialize_circuit_base64<'de, D>(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let bytecode_b64: String = serde::Deserialize::deserialize(deserializer)?; + let circuit_bytes = base64::engine::general_purpose::STANDARD + .decode(bytecode_b64) + .map_err(D::Error::custom)?; + let circuit = Self::deserialize_circuit(&circuit_bytes).map_err(D::Error::custom)?; + Ok(circuit) + } } impl std::fmt::Display for Circuit { @@ -229,9 +263,8 @@ mod tests { }; fn read_write(circuit: Circuit) -> (Circuit, Circuit) { - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); - let got_circuit = Circuit::read(&*bytes).unwrap(); + let bytes = Circuit::serialize_circuit(&circuit); + let got_circuit = Circuit::deserialize_circuit(&bytes).unwrap(); (circuit, got_circuit) } @@ -277,7 +310,7 @@ mod tests { encoder.write_all(bad_circuit).unwrap(); encoder.finish().unwrap(); - let deserialization_result = Circuit::read(&*zipped_bad_circuit); + let deserialization_result = Circuit::deserialize_circuit(&zipped_bad_circuit); assert!(deserialization_result.is_err()); } } diff --git a/acvm-repo/acir/tests/test_program_serialization.rs b/acvm-repo/acir/tests/test_program_serialization.rs index 2a25129df48..ff69ba34437 100644 --- a/acvm-repo/acir/tests/test_program_serialization.rs +++ b/acvm-repo/acir/tests/test_program_serialization.rs @@ -42,8 +42,7 @@ fn addition_circuit() { ..Circuit::default() }; - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); + let bytes = Circuit::serialize_circuit(&circuit); let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 173, 144, 187, 13, 192, 32, 12, 68, 249, 100, 32, 27, @@ -73,8 +72,7 @@ fn fixed_base_scalar_mul_circuit() { ..Circuit::default() }; - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); + let bytes = Circuit::serialize_circuit(&circuit); let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 138, 91, 10, 0, 48, 12, 194, 178, 215, 215, 46, 189, @@ -101,8 +99,7 @@ fn pedersen_circuit() { ..Circuit::default() }; - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); + let bytes = Circuit::serialize_circuit(&circuit); let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 138, 9, 10, 0, 64, 8, 2, 103, 15, 250, 255, 139, @@ -143,8 +140,7 @@ fn schnorr_verify_circuit() { ..Circuit::default() }; - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); + let bytes = Circuit::serialize_circuit(&circuit); let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 210, 87, 78, 2, 1, 20, 134, 209, 177, 247, 222, 123, @@ -197,8 +193,7 @@ fn simple_brillig_foreign_call() { ..Circuit::default() }; - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); + let bytes = Circuit::serialize_circuit(&circuit); let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 173, 143, 49, 10, 64, 33, 12, 67, 99, 63, 124, 60, 142, @@ -271,8 +266,7 @@ fn complex_brillig_foreign_call() { ..Circuit::default() }; - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); + let bytes = Circuit::serialize_circuit(&circuit); let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 213, 83, 219, 10, 128, 48, 8, 117, 174, 139, 159, 179, @@ -310,8 +304,7 @@ fn memory_op_circuit() { return_values: PublicInputs([Witness(4)].into()), ..Circuit::default() }; - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); + let bytes = Circuit::serialize_circuit(&circuit); let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 213, 146, 49, 14, 0, 32, 8, 3, 139, 192, 127, 240, 7, diff --git a/acvm-repo/acvm_js/src/execute.rs b/acvm-repo/acvm_js/src/execute.rs index ebbfc4297c3..81e2a11ed5a 100644 --- a/acvm-repo/acvm_js/src/execute.rs +++ b/acvm-repo/acvm_js/src/execute.rs @@ -64,7 +64,8 @@ pub async fn execute_circuit_with_black_box_solver( foreign_call_handler: ForeignCallHandler, ) -> Result { console_error_panic_hook::set_once(); - let circuit: Circuit = Circuit::read(&*circuit).expect("Failed to deserialize circuit"); + let circuit: Circuit = + Circuit::deserialize_circuit(&circuit).expect("Failed to deserialize circuit"); let mut acvm = ACVM::new(&solver.0, &circuit.opcodes, initial_witness.into()); diff --git a/acvm-repo/acvm_js/src/public_witness.rs b/acvm-repo/acvm_js/src/public_witness.rs index 46e4b788772..8dc66c435b3 100644 --- a/acvm-repo/acvm_js/src/public_witness.rs +++ b/acvm-repo/acvm_js/src/public_witness.rs @@ -30,7 +30,8 @@ pub fn get_return_witness( witness_map: JsWitnessMap, ) -> Result { console_error_panic_hook::set_once(); - let circuit: Circuit = Circuit::read(&*circuit).expect("Failed to deserialize circuit"); + let circuit: Circuit = + Circuit::deserialize_circuit(&circuit).expect("Failed to deserialize circuit"); let witness_map = WitnessMap::from(witness_map); let return_witness = @@ -50,7 +51,8 @@ pub fn get_public_parameters_witness( solved_witness: JsWitnessMap, ) -> Result { console_error_panic_hook::set_once(); - let circuit: Circuit = Circuit::read(&*circuit).expect("Failed to deserialize circuit"); + let circuit: Circuit = + Circuit::deserialize_circuit(&circuit).expect("Failed to deserialize circuit"); let witness_map = WitnessMap::from(solved_witness); let public_params_witness = @@ -70,7 +72,8 @@ pub fn get_public_witness( solved_witness: JsWitnessMap, ) -> Result { console_error_panic_hook::set_once(); - let circuit: Circuit = Circuit::read(&*circuit).expect("Failed to deserialize circuit"); + let circuit: Circuit = + Circuit::deserialize_circuit(&circuit).expect("Failed to deserialize circuit"); let witness_map = WitnessMap::from(solved_witness); let public_witness = diff --git a/compiler/noirc_driver/Cargo.toml b/compiler/noirc_driver/Cargo.toml index 31c0f695d0f..870885177c7 100644 --- a/compiler/noirc_driver/Cargo.toml +++ b/compiler/noirc_driver/Cargo.toml @@ -20,5 +20,4 @@ acvm.workspace = true iter-extended.workspace = true fm.workspace = true serde.workspace = true -base64.workspace = true fxhash.workspace = true diff --git a/compiler/noirc_driver/src/contract.rs b/compiler/noirc_driver/src/contract.rs index d8688780a1f..ae55d239cf3 100644 --- a/compiler/noirc_driver/src/contract.rs +++ b/compiler/noirc_driver/src/contract.rs @@ -8,7 +8,6 @@ use noirc_errors::debug_info::DebugInfo; use noirc_evaluator::errors::SsaReport; use super::debug::DebugFile; -use crate::program::{deserialize_circuit, serialize_circuit}; /// Describes the types of smart contract functions that are allowed. /// Unlike the similar enum in noirc_frontend, 'open' and 'unconstrained' @@ -62,7 +61,10 @@ pub struct ContractFunction { pub abi: Abi, - #[serde(serialize_with = "serialize_circuit", deserialize_with = "deserialize_circuit")] + #[serde( + serialize_with = "Circuit::serialize_circuit_base64", + deserialize_with = "Circuit::deserialize_circuit_base64" + )] pub bytecode: Circuit, pub debug: DebugInfo, diff --git a/compiler/noirc_driver/src/program.rs b/compiler/noirc_driver/src/program.rs index a940f6b20b8..8d509d3bf68 100644 --- a/compiler/noirc_driver/src/program.rs +++ b/compiler/noirc_driver/src/program.rs @@ -3,11 +3,9 @@ use std::collections::BTreeMap; use acvm::acir::circuit::Circuit; use fm::FileId; -use base64::Engine; use noirc_errors::debug_info::DebugInfo; use noirc_evaluator::errors::SsaReport; -use serde::{de::Error as DeserializationError, ser::Error as SerializationError}; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde::{Deserialize, Serialize}; use super::debug::DebugFile; @@ -20,32 +18,13 @@ pub struct CompiledProgram { /// Used to short-circuit compilation in the case of the source code not changing since the last compilation. pub hash: u64, - #[serde(serialize_with = "serialize_circuit", deserialize_with = "deserialize_circuit")] + #[serde( + serialize_with = "Circuit::serialize_circuit_base64", + deserialize_with = "Circuit::deserialize_circuit_base64" + )] pub circuit: Circuit, pub abi: noirc_abi::Abi, pub debug: DebugInfo, pub file_map: BTreeMap, pub warnings: Vec, } - -pub(crate) fn serialize_circuit(circuit: &Circuit, s: S) -> Result -where - S: Serializer, -{ - let mut circuit_bytes: Vec = Vec::new(); - circuit.write(&mut circuit_bytes).map_err(S::Error::custom)?; - - let encoded_b64 = base64::engine::general_purpose::STANDARD.encode(circuit_bytes); - s.serialize_str(&encoded_b64) -} - -pub(crate) fn deserialize_circuit<'de, D>(deserializer: D) -> Result -where - D: Deserializer<'de>, -{ - let bytecode_b64: String = serde::Deserialize::deserialize(deserializer)?; - let circuit_bytes = - base64::engine::general_purpose::STANDARD.decode(bytecode_b64).map_err(D::Error::custom)?; - let circuit = Circuit::read(&*circuit_bytes).map_err(D::Error::custom)?; - Ok(circuit) -} diff --git a/compiler/wasm/src/circuit.rs b/compiler/wasm/src/circuit.rs index 97f9ef9cf18..fdd9a7d9a20 100644 --- a/compiler/wasm/src/circuit.rs +++ b/compiler/wasm/src/circuit.rs @@ -6,7 +6,7 @@ use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn acir_read_bytes(bytes: Vec) -> JsValue { console_error_panic_hook::set_once(); - let circuit = Circuit::read(&*bytes).unwrap(); + let circuit = Circuit::deserialize_circuit(&bytes).unwrap(); ::from_serde(&circuit).unwrap() } @@ -14,7 +14,5 @@ pub fn acir_read_bytes(bytes: Vec) -> JsValue { pub fn acir_write_bytes(acir: JsValue) -> Vec { console_error_panic_hook::set_once(); let circuit: Circuit = JsValueSerdeExt::into_serde(&acir).unwrap(); - let mut bytes = Vec::new(); - circuit.write(&mut bytes).unwrap(); - bytes + Circuit::serialize_circuit(&circuit) } diff --git a/tooling/backend_interface/src/proof_system.rs b/tooling/backend_interface/src/proof_system.rs index c4fc6e743e5..95da1462d4e 100644 --- a/tooling/backend_interface/src/proof_system.rs +++ b/tooling/backend_interface/src/proof_system.rs @@ -23,7 +23,7 @@ impl Backend { // Create a temporary file for the circuit let circuit_path = temp_directory.join("circuit").with_extension("bytecode"); - let serialized_circuit = serialize_circuit(circuit); + let serialized_circuit = Circuit::serialize_circuit(circuit); write_to_file(&serialized_circuit, &circuit_path); GatesCommand { crs_path: self.crs_directory(), bytecode_path: circuit_path } @@ -57,7 +57,7 @@ impl Backend { // Create a temporary file for the circuit // let bytecode_path = temp_directory.join("circuit").with_extension("bytecode"); - let serialized_circuit = serialize_circuit(circuit); + let serialized_circuit = Circuit::serialize_circuit(circuit); write_to_file(&serialized_circuit, &bytecode_path); // Create proof and store it in the specified path @@ -97,7 +97,7 @@ impl Backend { // Create a temporary file for the circuit let bytecode_path = temp_directory.join("circuit").with_extension("bytecode"); - let serialized_circuit = serialize_circuit(circuit); + let serialized_circuit = Circuit::serialize_circuit(circuit); write_to_file(&serialized_circuit, &bytecode_path); // Create the verification key and write it to the specified path @@ -130,7 +130,7 @@ impl Backend { // Create a temporary file for the circuit // let bytecode_path = temp_directory.join("circuit").with_extension("bytecode"); - let serialized_circuit = serialize_circuit(circuit); + let serialized_circuit = Circuit::serialize_circuit(circuit); write_to_file(&serialized_circuit, &bytecode_path); // Create the verification key and write it to the specified path @@ -174,11 +174,3 @@ pub(super) fn write_to_file(bytes: &[u8], path: &Path) -> String { Ok(_) => display.to_string(), } } - -// TODO: See nargo/src/artifacts/mod.rs -// TODO: This method should live in ACVM and be the default method for serializing/deserializing circuits -pub(super) fn serialize_circuit(circuit: &Circuit) -> Vec { - let mut circuit_bytes: Vec = Vec::new(); - circuit.write(&mut circuit_bytes).unwrap(); - circuit_bytes -} diff --git a/tooling/backend_interface/src/smart_contract.rs b/tooling/backend_interface/src/smart_contract.rs index 08f67e7b9bc..5dac57c4072 100644 --- a/tooling/backend_interface/src/smart_contract.rs +++ b/tooling/backend_interface/src/smart_contract.rs @@ -1,4 +1,4 @@ -use super::proof_system::{serialize_circuit, write_to_file}; +use super::proof_system::write_to_file; use crate::{ cli::{ContractCommand, WriteVkCommand}, Backend, BackendError, @@ -16,7 +16,7 @@ impl Backend { // Create a temporary file for the circuit let bytecode_path = temp_directory_path.join("circuit").with_extension("bytecode"); - let serialized_circuit = serialize_circuit(circuit); + let serialized_circuit = Circuit::serialize_circuit(circuit); write_to_file(&serialized_circuit, &bytecode_path); // Create the verification key and write it to the specified path diff --git a/tooling/nargo/Cargo.toml b/tooling/nargo/Cargo.toml index eda15ff2594..e6674c043d7 100644 --- a/tooling/nargo/Cargo.toml +++ b/tooling/nargo/Cargo.toml @@ -23,5 +23,4 @@ noirc_printable_type.workspace = true iter-extended.workspace = true serde.workspace = true thiserror.workspace = true -base64.workspace = true codespan-reporting.workspace = true diff --git a/tooling/nargo/src/artifacts/contract.rs b/tooling/nargo/src/artifacts/contract.rs index 4f1ae0e10a0..f9e8d45b02e 100644 --- a/tooling/nargo/src/artifacts/contract.rs +++ b/tooling/nargo/src/artifacts/contract.rs @@ -37,8 +37,8 @@ pub struct PreprocessedContractFunction { pub abi: Abi, #[serde( - serialize_with = "super::serialize_circuit", - deserialize_with = "super::deserialize_circuit" + serialize_with = "Circuit::serialize_circuit_base64", + deserialize_with = "Circuit::deserialize_circuit_base64" )] pub bytecode: Circuit, } diff --git a/tooling/nargo/src/artifacts/mod.rs b/tooling/nargo/src/artifacts/mod.rs index d25c65afd98..180a900fd81 100644 --- a/tooling/nargo/src/artifacts/mod.rs +++ b/tooling/nargo/src/artifacts/mod.rs @@ -3,34 +3,6 @@ //! These artifacts are intended to remain independent of any applications being built on top of Noir. //! Should any projects require/desire a different artifact format, it's expected that they will write a transformer //! to generate them using these artifacts as a starting point. -use acvm::acir::circuit::Circuit; -use base64::Engine; -use serde::{ - de::Error as DeserializationError, ser::Error as SerializationError, Deserializer, Serializer, -}; - pub mod contract; pub mod debug; pub mod program; - -// TODO: move these down into ACVM. -fn serialize_circuit(circuit: &Circuit, s: S) -> Result -where - S: Serializer, -{ - let mut circuit_bytes: Vec = Vec::new(); - circuit.write(&mut circuit_bytes).map_err(S::Error::custom)?; - let encoded_b64 = base64::engine::general_purpose::STANDARD.encode(circuit_bytes); - s.serialize_str(&encoded_b64) -} - -fn deserialize_circuit<'de, D>(deserializer: D) -> Result -where - D: Deserializer<'de>, -{ - let bytecode_b64: String = serde::Deserialize::deserialize(deserializer)?; - let circuit_bytes = - base64::engine::general_purpose::STANDARD.decode(bytecode_b64).map_err(D::Error::custom)?; - let circuit = Circuit::read(&*circuit_bytes).map_err(D::Error::custom)?; - Ok(circuit) -} diff --git a/tooling/nargo/src/artifacts/program.rs b/tooling/nargo/src/artifacts/program.rs index 5988f3f59cb..890b6c55f7d 100644 --- a/tooling/nargo/src/artifacts/program.rs +++ b/tooling/nargo/src/artifacts/program.rs @@ -21,8 +21,8 @@ pub struct PreprocessedProgram { pub abi: Abi, #[serde( - serialize_with = "super::serialize_circuit", - deserialize_with = "super::deserialize_circuit" + serialize_with = "Circuit::serialize_circuit_base64", + deserialize_with = "Circuit::deserialize_circuit_base64" )] pub bytecode: Circuit, } From 718f87826b1eb36ed5d454bc01087c3ec4bd5193 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Mon, 30 Oct 2023 14:51:34 +0200 Subject: [PATCH 05/19] changed Cargo.lock --- .gitignore | 3 + Cargo.lock | 431 ++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 348 insertions(+), 86 deletions(-) diff --git a/.gitignore b/.gitignore index 169353af2b6..d854cc54cb0 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,6 @@ compiler/wasm/web tooling/noirc_abi_wasm/nodejs tooling/noirc_abi_wasm/web tooling/noir_js/lib + +# Doc-generator +tooling/doc_generator/generated_doc diff --git a/Cargo.lock b/Cargo.lock index b5119d9de73..43f3345c1ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,14 +2,27 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "acir" +version = "0.28.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acir_field 0.28.0", + "bincode", + "brillig 0.28.0", + "flate2", + "serde", + "thiserror", +] + [[package]] name = "acir" version = "0.30.0" dependencies = [ - "acir_field", + "acir_field 0.30.0", "base64", "bincode", - "brillig", + "brillig 0.30.0", "flate2", "fxhash", "serde", @@ -21,6 +34,20 @@ dependencies = [ "thiserror", ] +[[package]] +name = "acir_field" +version = "0.28.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "ark-bn254", + "ark-ff", + "cfg-if", + "hex", + "num-bigint", + "num-traits", + "serde", +] + [[package]] name = "acir_field" version = "0.30.0" @@ -35,14 +62,29 @@ dependencies = [ "serde", ] +[[package]] +name = "acvm" +version = "0.28.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acir 0.28.0", + "acvm_blackbox_solver 0.28.0", + "acvm_stdlib 0.28.0", + "brillig_vm 0.28.0", + "indexmap 1.9.3", + "num-bigint", + "num-traits", + "thiserror", +] + [[package]] name = "acvm" version = "0.30.0" dependencies = [ - "acir", - "acvm_blackbox_solver", - "acvm_stdlib", - "brillig_vm", + "acir 0.30.0", + "acvm_blackbox_solver 0.30.0", + "acvm_stdlib 0.30.0", + "brillig_vm 0.30.0", "indexmap 1.9.3", "num-bigint", "num-traits", @@ -52,11 +94,25 @@ dependencies = [ "thiserror", ] +[[package]] +name = "acvm_blackbox_solver" +version = "0.28.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acir 0.28.0", + "blake2", + "k256", + "p256", + "sha2", + "sha3", + "thiserror", +] + [[package]] name = "acvm_blackbox_solver" version = "0.30.0" dependencies = [ - "acir", + "acir 0.30.0", "blake2", "k256", "p256", @@ -69,7 +125,7 @@ dependencies = [ name = "acvm_js" version = "0.30.0" dependencies = [ - "acvm", + "acvm 0.30.0", "barretenberg_blackbox_solver", "build-data", "cfg-if", @@ -86,11 +142,19 @@ dependencies = [ "wasm-logger", ] +[[package]] +name = "acvm_stdlib" +version = "0.28.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acir 0.28.0", +] + [[package]] name = "acvm_stdlib" version = "0.30.0" dependencies = [ - "acir", + "acir 0.30.0", ] [[package]] @@ -216,6 +280,14 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "arena" +version = "0.16.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "generational-arena", +] + [[package]] name = "arena" version = "0.18.0" @@ -358,6 +430,50 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "askama" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" +dependencies = [ + "askama_derive", + "askama_escape", + "humansize", + "num-traits", + "percent-encoding", +] + +[[package]] +name = "askama_derive" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a0fc7dcf8bd4ead96b1d36b41df47c14beedf7b0301fc543d8f2384e66a2ec0" +dependencies = [ + "askama_parser", + "basic-toml", + "mime", + "mime_guess", + "proc-macro2", + "quote", + "serde", + "syn 2.0.32", +] + +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + +[[package]] +name = "askama_parser" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c268a96e01a4c47c8c5c2472aaa570707e006a875ea63e819f75474ceedaf7b4" +dependencies = [ + "nom", +] + [[package]] name = "assert_cmd" version = "2.0.12" @@ -418,7 +534,7 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" name = "backend-interface" version = "0.11.0" dependencies = [ - "acvm", + "acvm 0.30.0", "bb_abstraction_leaks", "build-target", "const_format", @@ -452,8 +568,8 @@ dependencies = [ name = "barretenberg_blackbox_solver" version = "0.30.0" dependencies = [ - "acir", - "acvm_blackbox_solver", + "acir 0.30.0", + "acvm_blackbox_solver 0.30.0", "ark-ec", "ark-ff", "flate2", @@ -488,11 +604,20 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +[[package]] +name = "basic-toml" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f2139706359229bfa8f19142ac1155b4b80beafb7a60471ac5dd109d4a19778" +dependencies = [ + "serde", +] + [[package]] name = "bb_abstraction_leaks" version = "0.11.0" dependencies = [ - "acvm", + "acvm 0.30.0", "build-target", "const_format", ] @@ -572,20 +697,40 @@ dependencies = [ "generic-array", ] +[[package]] +name = "brillig" +version = "0.28.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acir_field 0.28.0", + "serde", +] + [[package]] name = "brillig" version = "0.30.0" dependencies = [ - "acir_field", + "acir_field 0.30.0", "serde", ] +[[package]] +name = "brillig_vm" +version = "0.28.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acir 0.28.0", + "acvm_blackbox_solver 0.28.0", + "num-bigint", + "num-traits", +] + [[package]] name = "brillig_vm" version = "0.30.0" dependencies = [ - "acir", - "acvm_blackbox_solver", + "acir 0.30.0", + "acvm_blackbox_solver 0.30.0", "num-bigint", "num-traits", ] @@ -813,7 +958,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -1214,7 +1359,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -1225,7 +1370,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -1344,6 +1489,14 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "doc-generator" +version = "0.1.0" +dependencies = [ + "askama", + "noirc_frontend 0.16.0", +] + [[package]] name = "easy-repl" version = "0.2.1" @@ -1462,7 +1615,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -1600,12 +1753,22 @@ dependencies = [ "num-traits", ] +[[package]] +name = "fm" +version = "0.16.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "codespan-reporting", + "rust-embed", + "serde", +] + [[package]] name = "fm" version = "0.18.0" dependencies = [ "codespan-reporting", - "iter-extended", + "iter-extended 0.18.0", "rust-embed", "serde", "tempfile", @@ -1676,7 +1839,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -1960,6 +2123,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + [[package]] name = "hyper" version = "0.14.27" @@ -2182,6 +2354,11 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "iter-extended" +version = "0.16.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" + [[package]] name = "iter-extended" version = "0.18.0" @@ -2375,6 +2552,22 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.1" @@ -2405,16 +2598,16 @@ checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" name = "nargo" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "codespan-reporting", - "fm", - "iter-extended", + "fm 0.18.0", + "iter-extended 0.18.0", "noirc_abi", "noirc_driver", - "noirc_errors", + "noirc_errors 0.18.0", "noirc_evaluator", - "noirc_frontend", - "noirc_printable_type", + "noirc_frontend 0.18.0", + "noirc_printable_type 0.18.0", "rustc_version", "serde", "thiserror", @@ -2424,7 +2617,7 @@ dependencies = [ name = "nargo_cli" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "assert_cmd", "assert_fs", "async-lsp", @@ -2437,10 +2630,10 @@ dependencies = [ "const_format", "criterion", "dirs", - "fm", + "fm 0.18.0", "hex", "iai", - "iter-extended", + "iter-extended 0.18.0", "nargo", "nargo_fmt", "nargo_toml", @@ -2448,8 +2641,8 @@ dependencies = [ "noir_lsp", "noirc_abi", "noirc_driver", - "noirc_errors", - "noirc_frontend", + "noirc_errors 0.18.0", + "noirc_frontend 0.18.0", "paste", "pprof", "predicates 2.1.5", @@ -2473,7 +2666,7 @@ name = "nargo_fmt" version = "0.18.0" dependencies = [ "bytecount", - "noirc_frontend", + "noirc_frontend 0.18.0", "serde", "similar-asserts", "thiserror", @@ -2485,9 +2678,9 @@ name = "nargo_toml" version = "0.18.0" dependencies = [ "dirs", - "fm", + "fm 0.18.0", "nargo", - "noirc_frontend", + "noirc_frontend 0.18.0", "serde", "thiserror", "toml", @@ -2532,12 +2725,12 @@ dependencies = [ name = "noir_debugger" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "codespan-reporting", "easy-repl", "nargo", - "noirc_errors", - "noirc_printable_type", + "noirc_errors 0.18.0", + "noirc_printable_type 0.18.0", "owo-colors", "thiserror", ] @@ -2546,7 +2739,7 @@ dependencies = [ name = "noir_lsp" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "async-lsp", "cfg-if", "codespan-lsp", @@ -2555,8 +2748,8 @@ dependencies = [ "nargo", "nargo_toml", "noirc_driver", - "noirc_errors", - "noirc_frontend", + "noirc_errors 0.18.0", + "noirc_frontend 0.18.0", "serde", "serde_json", "tokio", @@ -2568,19 +2761,19 @@ dependencies = [ name = "noir_wasm" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "build-data", "cfg-if", "console_error_panic_hook", - "fm", + "fm 0.18.0", "getrandom", "gloo-utils", "js-sys", "log", "nargo", "noirc_driver", - "noirc_errors", - "noirc_frontend", + "noirc_errors 0.18.0", + "noirc_frontend 0.18.0", "serde", "wasm-bindgen", "wasm-logger", @@ -2590,9 +2783,9 @@ dependencies = [ name = "noirc_abi" version = "0.18.0" dependencies = [ - "acvm", - "iter-extended", - "noirc_frontend", + "acvm 0.30.0", + "iter-extended 0.18.0", + "noirc_frontend 0.18.0", "num-bigint", "num-traits", "serde", @@ -2607,12 +2800,12 @@ dependencies = [ name = "noirc_abi_wasm" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "build-data", "console_error_panic_hook", "getrandom", "gloo-utils", - "iter-extended", + "iter-extended 0.18.0", "js-sys", "noirc_abi", "serde", @@ -2624,28 +2817,42 @@ dependencies = [ name = "noirc_driver" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "build-data", "clap", - "fm", + "fm 0.18.0", "fxhash", - "iter-extended", + "iter-extended 0.18.0", "noirc_abi", - "noirc_errors", + "noirc_errors 0.18.0", "noirc_evaluator", - "noirc_frontend", + "noirc_frontend 0.18.0", "serde", ] +[[package]] +name = "noirc_errors" +version = "0.16.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acvm 0.28.0", + "chumsky", + "codespan", + "codespan-reporting", + "fm 0.16.0", + "serde", + "serde_with", +] + [[package]] name = "noirc_errors" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "chumsky", "codespan", "codespan-reporting", - "fm", + "fm 0.18.0", "serde", "serde_with", ] @@ -2654,29 +2861,49 @@ dependencies = [ name = "noirc_evaluator" version = "0.18.0" dependencies = [ - "acvm", + "acvm 0.30.0", "fxhash", "im", - "iter-extended", + "iter-extended 0.18.0", "noirc_abi", - "noirc_errors", - "noirc_frontend", + "noirc_errors 0.18.0", + "noirc_frontend 0.18.0", "num-bigint", "serde", "thiserror", ] +[[package]] +name = "noirc_frontend" +version = "0.16.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acvm 0.28.0", + "arena 0.16.0", + "chumsky", + "fm 0.16.0", + "iter-extended 0.16.0", + "noirc_errors 0.16.0", + "noirc_printable_type 0.16.0", + "regex", + "rustc-hash", + "serde_json", + "small-ord-set", + "smol_str", + "thiserror", +] + [[package]] name = "noirc_frontend" version = "0.18.0" dependencies = [ - "acvm", - "arena", + "acvm 0.30.0", + "arena 0.18.0", "chumsky", - "fm", - "iter-extended", - "noirc_errors", - "noirc_printable_type", + "fm 0.18.0", + "iter-extended 0.18.0", + "noirc_errors 0.18.0", + "noirc_printable_type 0.18.0", "regex", "rustc-hash", "serde", @@ -2688,18 +2915,41 @@ dependencies = [ "thiserror", ] +[[package]] +name = "noirc_printable_type" +version = "0.16.0" +source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" +dependencies = [ + "acvm 0.28.0", + "iter-extended 0.16.0", + "regex", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "noirc_printable_type" version = "0.18.0" dependencies = [ - "acvm", - "iter-extended", + "acvm 0.30.0", + "iter-extended 0.18.0", "regex", "serde", "serde_json", "thiserror", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "normalize-line-endings" version = "0.3.0" @@ -3428,7 +3678,7 @@ dependencies = [ "quote", "rust-embed-utils", "shellexpand", - "syn 2.0.26", + "syn 2.0.32", "walkdir", ] @@ -3695,9 +3945,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.171" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" dependencies = [ "serde_derive", ] @@ -3740,13 +3990,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.171" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" +checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -3768,7 +4018,7 @@ checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -3818,7 +4068,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -4080,9 +4330,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.26" +version = "2.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970" +checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2" dependencies = [ "proc-macro2", "quote", @@ -4203,7 +4453,7 @@ checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -4295,7 +4545,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -4401,7 +4651,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] [[package]] @@ -4462,6 +4712,15 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.13" @@ -4616,7 +4875,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", "wasm-bindgen-shared", ] @@ -4673,7 +4932,7 @@ checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5177,5 +5436,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.32", ] From 2d12504bcf69089ccb293b03a410de3e7b4552c8 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Mon, 30 Oct 2023 17:33:36 +0200 Subject: [PATCH 06/19] added doc-domments --- tooling/doc_generator/src/getters.rs | 64 +++++++++++++++++ tooling/doc_generator/src/main.rs | 21 ++++-- tooling/doc_generator/src/output.rs | 19 +++++ tooling/doc_generator/src/pages_generation.rs | 69 +++++++++++++++++++ 4 files changed, 168 insertions(+), 5 deletions(-) diff --git a/tooling/doc_generator/src/getters.rs b/tooling/doc_generator/src/getters.rs index 0e27f1dfbe0..83a63cb8916 100644 --- a/tooling/doc_generator/src/getters.rs +++ b/tooling/doc_generator/src/getters.rs @@ -12,6 +12,13 @@ use noirc_frontend::{ use crate::{Function, Output}; +/// Retrieves the content of a module from a list of tokens and the starting index. + +/// The `get_module_content` function is designed to obtain the content of a module based on +/// a list of `tokens` and the starting index `index`. It looks for a module description that +/// begins at the index `index` and may be terminated by either semicolons `;` or curly braces `{}`. +/// If the module is terminated by semicolons `;`, the function loads the module content from a file +/// whose name is specified before the semicolon in the list of tokens. pub(crate) fn get_module_content(tokens: &[Token], index: usize) -> Vec { let mut content = Vec::new(); let mut i = index; @@ -61,6 +68,12 @@ pub(crate) fn get_module_content(tokens: &[Token], index: usize) -> Vec res } +/// Skips an implementation block within a list of tokens, starting at the given index. + +/// The `skip_impl_block` function is used to skip an implementation block within a list of tokens. +/// It starts at the specified index and continues until it finds the closing curly brace `}` of +/// the implementation block. This function is useful when you want to ignore or bypass an +/// implementation block in the token list. pub(crate) fn skip_impl_block(tokens: &[Token], index: usize) -> usize { let mut brace_counter = 0; let mut i = index; @@ -114,6 +127,12 @@ pub(crate) fn fn_signature(tokens: &[Token], index: usize) -> String { res } +/// Extracts the function signature from a list of tokens starting at the given index. + +/// The `fn_signature` function is designed to extract the function signature from a list of tokens. +/// It starts at the specified index and continues until it encounters a left curly brace `{` or a semicolon `;`, +/// indicating the start of the function's body or the end of the signature. The function returns the extracted +/// function signature as a string. pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { let mut res = String::new(); let mut i = index; @@ -176,6 +195,12 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { res } +/// Extracts information about a trait from a list of tokens starting at the given index. + +/// The `trait_info` function is used to extract information about a trait from a list of tokens. +/// It starts at the specified index and continues until it collects details about the trait's signature, +/// required methods, and provided methods. The extracted information is returned as a tuple, including +/// the trait's signature as a string, a vector of required methods, and a vector of provided methods. pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec, Vec) { let mut sign = String::new(); let mut required_methods = Vec::new(); @@ -268,6 +293,13 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec String { let res = match &tokens[index - 1] { Token::DocComment(DocComments::Outer(dc)) => { @@ -316,6 +348,12 @@ pub(crate) fn additional_doc(tokens: &[Token], index: usize) -> String { res } +/// Extracts documentation comments for a code element from a list of tokens. + +/// The `doc` function is used to extract documentation comments associated with a code element +/// from a list of tokens. These comments are often used to provide explanations, descriptions, +/// or comments about the code element. The function starts at the specified index and searches +/// for relevant documentation comments, and then returns the combined documentation as a string. pub(crate) fn doc(tokens: &[Token], index: usize) -> String { if index == 0 { return String::new(); @@ -369,6 +407,13 @@ pub(crate) fn doc(tokens: &[Token], index: usize) -> String { res } +/// Extracts an outer documentation comment associated with a code element from a list of tokens. + +/// The `outer_doc` function is used to extract an outer documentation comment associated with a +/// code element from a list of tokens. Outer documentation comments are often used to provide +/// high-level explanations or descriptions for the code element. The function starts at the +/// specified index and searches for an outer documentation comment, returning the comment as a string +/// along with the updated index. pub(crate) fn outer_doc(tokens: &[Token], index: usize) -> (String, usize) { let mut i = index; let mut res = tokens[i].to_string(); @@ -394,6 +439,11 @@ pub(crate) fn outer_doc(tokens: &[Token], index: usize) -> (String, usize) { (res, i) } +/// Reads and tokenizes the content of a source file, returning a vector of spanned tokens. + +/// The `get_doc` function reads the content of a source file specified by the `input_file` path, +/// tokenizes the content, and returns the resulting vector of spanned tokens. This function is +/// typically used for processing source code and extracting tokens for further analysis or documentation. pub(crate) fn get_doc(input_file: &str) -> Result, Box> { let mut file = File::open(input_file)?; let mut contents = String::new(); @@ -407,18 +457,32 @@ pub(crate) fn get_doc(input_file: &str) -> Result, Box, } +/// Represents an individual line of code within a code block. + +/// The `CodeLine` struct represents an individual line of code within a code block. It is typically +/// used within a `Code` structure to create a collection of code lines for documentation or rendering purposes. #[derive(Debug)] pub(crate) struct CodeLine { number: u32, text: String, } +/// Reads a text file and converts its content into a vector of code lines. + +/// The `get_text` function reads the content of a text file specified by the `input_file` path, +/// and converts each line of text into a `CodeLine` structure. The resulting `CodeLine` structures +/// are collected in a vector, making it easy to work with text content as a collection of code lines. pub(crate) fn get_text(input_file: &str) -> Result, Box> { let file = File::open(input_file)?; let reader = BufReader::new(file); diff --git a/tooling/doc_generator/src/main.rs b/tooling/doc_generator/src/main.rs index de307ab061f..60c97870f31 100644 --- a/tooling/doc_generator/src/main.rs +++ b/tooling/doc_generator/src/main.rs @@ -8,9 +8,12 @@ use output::*; use pages_generation::*; use std::collections::HashMap; -/// the main function of the program -/// generates all documentation files -/// the input file is a file with a Noir code +/// Generates documentation from the source code in the specified input file. + +/// The `generate_doc` function reads the source code from the given input file, processes it, and +/// generates documentation based on the code's structure and comments. The resulting documentation +/// is typically written to an output file or another destination. This function simplifies the +/// process of generating documentation from source code. pub fn generate_doc(input_file: &str) -> Result<(), Box> { let doc = get_doc(input_file).unwrap(); @@ -25,13 +28,21 @@ pub fn generate_doc(input_file: &str) -> Result<(), Box> Ok(()) } +/// Represents a mapping of information to corresponding documentation. + +/// The `Map` struct is used to create a mapping between information and its corresponding documentation. +/// This can be useful for organizing and retrieving documentation related to specific code elements +/// or information from the source code. #[derive(Debug, PartialEq, Eq)] pub struct Map { map: HashMap, } -/// returns all necessary information for generating documentation -/// the input file is a file with a Noir code +/// Retrieves and maps necessary information to documentation from a Noir code file. + +/// The `get_map` function reads a Noir code file specified by the `input_file` path, processes it, +/// and maps the necessary information to its corresponding documentation. It returns a `Map` structure +/// that provides a convenient way to access the documentation associated with various code elements. pub fn get_map(input_file: &str) -> Map { let mut map = HashMap::new(); diff --git a/tooling/doc_generator/src/output.rs b/tooling/doc_generator/src/output.rs index 66e59125e63..5075cd9e521 100644 --- a/tooling/doc_generator/src/output.rs +++ b/tooling/doc_generator/src/output.rs @@ -7,6 +7,10 @@ use crate::{ struct_signature, trait_info, Function, Implementation, }; +/// Represents the type or category of code element or information. + +/// The `Type` enum is used to categorize code elements or information based on their type or purpose. +/// This classification can help in organizing and processing code elements and their associated documentation. #[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)] pub(crate) enum Type { Function, @@ -28,6 +32,11 @@ impl fmt::Display for Type { } } +/// Represents detailed information about a code element. + +/// The `Info` enum provides detailed information about code elements, including their type, signature, +/// documentation, and any additional details. It is used to capture and organize information related to code elements +/// for documentation and processing purposes. #[derive(Debug, Clone, Eq, Hash, PartialEq)] pub(crate) enum Info { Function { @@ -99,6 +108,11 @@ impl Info { } } +/// Represents an output object that combines code information, documentation, and type details. + +/// The `Output` struct serves as a container for code-related information, documentation, and type details. +/// It allows you to bundle these attributes together, making it convenient for storing and processing code +/// elements, their associated documentation, and their categorized types. #[derive(Debug, Clone, Eq, PartialEq, Hash)] pub(crate) struct Output { pub(crate) r#type: Type, @@ -108,6 +122,11 @@ pub(crate) struct Output { } impl Output { + /// Converts a vector of spanned tokens into a vector of structured output objects. + + /// The `to_output` function processes a vector of spanned tokens, typically representing source code, + /// and converts them into a vector of structured output objects. Each output object includes information + /// about the code element, its type, name, documentation, and additional details as applicable. pub(crate) fn to_output(input: Vec) -> Vec { let mut res = Vec::new(); let tokens = input.into_iter().map(|x| x.into_token()).collect::>(); diff --git a/tooling/doc_generator/src/pages_generation.rs b/tooling/doc_generator/src/pages_generation.rs index 2e968cbab2e..16e18c54213 100644 --- a/tooling/doc_generator/src/pages_generation.rs +++ b/tooling/doc_generator/src/pages_generation.rs @@ -9,6 +9,11 @@ use noirc_frontend::token::{Keyword, Token}; use crate::{doc, fn_signature, get_text, Code, Output, Type}; +/// Generates an HTML code page from the content of a text file. + +/// The `generate_code_page` function reads the content of a text file specified by the `input_file` path, +/// processes the text content as code lines, and generates an HTML page that displays the code lines. +/// The resulting HTML page can be used for code documentation or rendering purposes. fn generate_code_page(input_file: &str) -> Result<(), Box> { let codelines = get_text(input_file)?; @@ -24,6 +29,11 @@ fn generate_code_page(input_file: &str) -> Result<(), Box Ok(()) } +/// Represents a function with associated documentation and signature. + +/// The `Function` struct is used to represent a function, providing information about its name, +/// documentation, signature, and whether it's a method. This structure is typically used to organize +/// and process information related to functions within the code. #[derive(Debug, Clone, Template, Eq, Hash, PartialEq)] #[template(path = "func_template.html")] pub(crate) struct Function { @@ -33,6 +43,11 @@ pub(crate) struct Function { pub(crate) is_method: bool, } +/// Generates an HTML page for a function with associated documentation. + +/// The `generate_function_pages` function generates an HTML page for a function represented by the `func` parameter. +/// The HTML page displays the function's name, documentation, and signature. This function is typically used to +/// generate documentation pages for functions. fn generate_function_pages(func: Function) -> Result<(), Box> { if func.is_method { return Ok(()); @@ -47,6 +62,11 @@ fn generate_function_pages(func: Function) -> Result<(), Box, } +/// Represents an implementation of methods for a code element. + +/// The `Implementation` struct provides information about the signature of an implementation and the associated +/// functions within the implementation. It is used to organize and process information related to the implementation +/// of methods for a code element. #[derive(Debug, Clone, Eq, Hash, PartialEq)] pub(crate) struct Implementation { signature: String, @@ -64,6 +89,10 @@ pub(crate) struct Implementation { } impl Implementation { + /// Retrieves a list of implementations for a code element. + + /// The `get_implementations` method is used to retrieve a list of implementations for a code element. + /// It searches through the provided tokens and identifies implementations associated with the original code element. pub(crate) fn get_implementations( tokens: &[Token], index: usize, @@ -156,6 +185,11 @@ impl Implementation { } } +/// Generates an HTML page for a structured code element with associated documentation. + +/// The `generate_structure_pages` function generates an HTML page for a structured code element represented by the `structure` parameter. +/// The HTML page displays information about the structured code element, including its name, documentation, signature, additional documentation, +/// and any associated implementations. This function is typically used to generate documentation pages for structured code elements. fn generate_structure_pages(structure: Structure) -> Result<(), Box> { let rendered_html = structure.render().unwrap(); @@ -167,6 +201,11 @@ fn generate_structure_pages(structure: Structure) -> Result<(), Box, } +/// Generates an HTML page for a trait with associated documentation, methods, and implementations. + +/// The `generate_trait_pages` function generates an HTML page for a trait represented by the `r#trait` parameter. +/// The HTML page displays information about the trait, including its name, documentation, signature, additional documentation, +/// required methods, provided methods, and any associated implementations. This function is typically used to generate +/// documentation pages for traits. fn generate_trait_pages(r#trait: Trait) -> Result<(), Box> { let rendered_html = r#trait.render().unwrap(); @@ -190,6 +235,11 @@ fn generate_trait_pages(r#trait: Trait) -> Result<(), Box Ok(()) } +/// Represents a collection of code outputs and their associated filename. + +/// The `AllOutput` struct is used to group together a collection of code outputs, typically representing documentation for code elements, +/// and associate them with a specific filename. This structure is commonly used to organize and generate documentation pages that include +/// multiple code outputs from various parts of the codebase. #[derive(Debug, Template)] #[template(path = "doc_template.html")] pub(crate) struct AllOutput { @@ -197,12 +247,21 @@ pub(crate) struct AllOutput { pub(crate) filename: String, } +/// Represents search results containing a list of code outputs. + +/// The `SearchResults` struct is used to represent search results containing a list of code outputs. This structure is typically used +/// when generating search result pages, allowing users to view and navigate code outputs matching their search queries. #[derive(Debug, Template)] #[template(path = "search_results_template.html")] pub(crate) struct SearchResults { results: Vec, } +/// Generates an HTML page for displaying search results. + +/// The `generate_search_page` function generates an HTML page to display search results provided in the `res` parameter. +/// The generated page includes a list of code outputs that match the search criteria. This function is typically used to +/// create search result pages for users searching for code documentation. fn generate_search_page( res: SearchResults, module_name: String, @@ -217,6 +276,11 @@ fn generate_search_page( Ok(()) } +/// Extracts the filename from a path, given the full filename with its path. + +/// The `extract_filename` function takes a full filename with its path as input and extracts the filename portion, excluding the path. +/// This function is useful when you need to isolate the filename from a file path, which can be particularly helpful when generating documentation +/// pages or handling file-related operations. pub(crate) fn extract_filename(filename_with_path: &str) -> Option<&str> { let path = Path::new(filename_with_path); match path.file_stem() { @@ -225,6 +289,11 @@ pub(crate) fn extract_filename(filename_with_path: &str) -> Option<&str> { } } +/// Generates an HTML documentation page for a module, including associated code elements. + +/// The `generate_module_page` function generates an HTML documentation page for a module and its associated code elements. +/// This page typically includes code outputs, such as functions, structs, traits, and other code constructs. It also provides +/// links to related code documentation and a search feature for easier navigation. pub(crate) fn generate_module_page(module: AllOutput) -> Result<(), Box> { let rendered_html = module.render().unwrap(); From 7ca5ce1620bf3fcc55b119b731420ca4a98091e0 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Wed, 8 Nov 2023 16:31:29 +0200 Subject: [PATCH 07/19] changed fork to main repo, fixed bugs --- Cargo.lock | 1180 ++++++++--------- tooling/doc_generator/Cargo.toml | 2 +- .../doc_generator/input_files/impl_example.nr | 8 + tooling/doc_generator/input_files/prog.nr | 22 + .../input_files/struct_example.nr | 5 + tooling/doc_generator/src/getters.rs | 35 +- tooling/doc_generator/src/output.rs | 6 +- tooling/doc_generator/src/pages_generation.rs | 1 + 8 files changed, 589 insertions(+), 670 deletions(-) create mode 100644 tooling/doc_generator/input_files/impl_example.nr diff --git a/Cargo.lock b/Cargo.lock index 706314026d8..2f286f3df5a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,19 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "acir" -version = "0.28.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acir_field 0.28.0", - "bincode", - "brillig 0.28.0", - "flate2", - "serde", - "thiserror", -] - [[package]] name = "acir" version = "0.30.0" @@ -22,7 +9,7 @@ dependencies = [ "acir_field", "base64", "bincode", - "brillig 0.30.0", + "brillig", "flate2", "fxhash", "serde", @@ -34,20 +21,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "acir_field" -version = "0.28.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "ark-bn254", - "ark-ff", - "cfg-if", - "hex", - "num-bigint", - "num-traits", - "serde", -] - [[package]] name = "acir_field" version = "0.30.0" @@ -62,29 +35,14 @@ dependencies = [ "serde", ] -[[package]] -name = "acvm" -version = "0.28.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acir 0.28.0", - "acvm_blackbox_solver 0.28.0", - "acvm_stdlib 0.28.0", - "brillig_vm 0.28.0", - "indexmap 1.9.3", - "num-bigint", - "num-traits", - "thiserror", -] - [[package]] name = "acvm" version = "0.30.0" dependencies = [ - "acir 0.30.0", - "acvm_blackbox_solver 0.30.0", - "acvm_stdlib 0.30.0", - "brillig_vm 0.30.0", + "acir", + "acvm_blackbox_solver", + "acvm_stdlib", + "brillig_vm", "indexmap 1.9.3", "num-bigint", "num-traits", @@ -94,25 +52,11 @@ dependencies = [ "thiserror", ] -[[package]] -name = "acvm_blackbox_solver" -version = "0.28.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acir 0.28.0", - "blake2", - "k256", - "p256", - "sha2", - "sha3", - "thiserror", -] - [[package]] name = "acvm_blackbox_solver" version = "0.30.0" dependencies = [ - "acir 0.30.0", + "acir", "blake2", "k256", "p256", @@ -125,7 +69,7 @@ dependencies = [ name = "acvm_js" version = "0.30.0" dependencies = [ - "acvm 0.30.0", + "acvm", "barretenberg_blackbox_solver", "build-data", "cfg-if", @@ -142,28 +86,20 @@ dependencies = [ "wasm-logger", ] -[[package]] -name = "acvm_stdlib" -version = "0.28.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acir 0.28.0", -] - [[package]] name = "acvm_stdlib" version = "0.30.0" dependencies = [ - "acir 0.30.0", + "acir", ] [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ - "gimli 0.27.3", + "gimli 0.28.0", ] [[package]] @@ -174,9 +110,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ "getrandom", "once_cell", @@ -185,21 +121,22 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "getrandom", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -227,30 +164,29 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] @@ -266,9 +202,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -280,14 +216,6 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" -[[package]] -name = "arena" -version = "0.16.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "generational-arena", -] - [[package]] name = "arena" version = "0.18.0" @@ -330,7 +258,7 @@ dependencies = [ "ark-std", "derivative", "hashbrown 0.13.2", - "itertools", + "itertools 0.10.5", "num-traits", "zeroize", ] @@ -347,7 +275,7 @@ dependencies = [ "ark-std", "derivative", "digest", - "itertools", + "itertools 0.10.5", "num-bigint", "num-traits", "paste", @@ -456,7 +384,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] @@ -481,9 +409,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6" dependencies = [ "anstyle", - "bstr 1.6.0", + "bstr 1.7.0", "doc-comment", - "predicates 3.0.3", + "predicates 3.0.4", "predicates-core", "predicates-tree", "wait-timeout", @@ -498,7 +426,7 @@ dependencies = [ "anstyle", "doc-comment", "globwalk", - "predicates 3.0.3", + "predicates 3.0.4", "predicates-core", "predicates-tree", "tempfile", @@ -511,9 +439,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72bd600f2652d2cccb0a33ab4f92d163ab3930844c8b0ad3713a5ae3285eeb4e" dependencies = [ "futures", - "lsp-types 0.94.0", + "lsp-types 0.94.1", "pin-project-lite", - "rustix 0.38.4", + "rustix", "serde", "serde_json", "thiserror", @@ -534,7 +462,7 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" name = "backend-interface" version = "0.11.0" dependencies = [ - "acvm 0.30.0", + "acvm", "bb_abstraction_leaks", "build-target", "const_format", @@ -551,9 +479,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -568,8 +496,8 @@ dependencies = [ name = "barretenberg_blackbox_solver" version = "0.30.0" dependencies = [ - "acir 0.30.0", - "acvm_blackbox_solver 0.30.0", + "acir", + "acvm_blackbox_solver", "ark-ec", "ark-ff", "flate2", @@ -594,9 +522,9 @@ checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -617,7 +545,7 @@ dependencies = [ name = "bb_abstraction_leaks" version = "0.11.0" dependencies = [ - "acvm 0.30.0", + "acvm", "build-target", "const_format", ] @@ -654,9 +582,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] name = "bitmaps" @@ -697,40 +625,20 @@ dependencies = [ "generic-array", ] -[[package]] -name = "brillig" -version = "0.28.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acir_field 0.28.0", - "serde", -] - [[package]] name = "brillig" version = "0.30.0" dependencies = [ - "acir_field 0.30.0", + "acir_field", "serde", ] -[[package]] -name = "brillig_vm" -version = "0.28.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acir 0.28.0", - "acvm_blackbox_solver 0.28.0", - "num-bigint", - "num-traits", -] - [[package]] name = "brillig_vm" version = "0.30.0" dependencies = [ - "acir 0.30.0", - "acvm_blackbox_solver 0.30.0", + "acir", + "acvm_blackbox_solver", "num-bigint", "num-traits", ] @@ -748,20 +656,20 @@ dependencies = [ [[package]] name = "bstr" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +checksum = "c79ad7fb2dd38f3dabd76b09c6a5a20c038fc0213ef1e9afd30eb777f120f019" dependencies = [ "memchr", - "regex-automata 0.3.3", + "regex-automata 0.4.3", "serde", ] [[package]] name = "build-data" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac83c47416b2db78a5a8a45d7d229a730b62806fa41ac6b4dbde6d016798776" +checksum = "aed3884e2cab7c973c8fd2d150314b6a932df7fdc830edcaf1e8e7c4ae9db3c0" dependencies = [ "chrono", "safe-lock", @@ -776,9 +684,9 @@ checksum = "832133bbabbbaa9fbdba793456a2827627a7d2b8fb96032fa1e7666d7895832b" [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "bytecheck" @@ -804,27 +712,27 @@ dependencies = [ [[package]] name = "bytecount" -version = "0.6.3" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" +checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "camino" @@ -837,9 +745,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" +checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36" dependencies = [ "serde", ] @@ -866,9 +774,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -878,17 +789,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.30" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", - "js-sys", "num-traits", "serde", - "wasm-bindgen", - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -928,20 +837,19 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.19" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.19" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" dependencies = [ "anstream", "anstyle", @@ -951,21 +859,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.12" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "clipboard-win" @@ -1067,9 +975,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "const-str" @@ -1079,24 +987,34 @@ checksum = "aca749d3d3f5b87a0d6100509879f9cf486ab510803a4a4e1001da1ff61c2bd6" [[package]] name = "const_format" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" dependencies = [ "proc-macro2", "quote", "unicode-xid", ] +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.4" @@ -1118,18 +1036,18 @@ dependencies = [ [[package]] name = "cpp_demangle" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee34052ee3d93d6d8f3e6f81d85c47921f6653a19a7b70e939e3e602d893a674" +checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" dependencies = [ "cfg-if", ] [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1238,7 +1156,7 @@ dependencies = [ "clap", "criterion-plot", "is-terminal", - "itertools", + "itertools 0.10.5", "num-traits", "once_cell", "oorandom", @@ -1259,7 +1177,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools", + "itertools 0.10.5", ] [[package]] @@ -1319,9 +1237,9 @@ dependencies = [ [[package]] name = "csv" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" dependencies = [ "csv-core", "itoa", @@ -1331,9 +1249,9 @@ dependencies = [ [[package]] name = "csv-core" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ "memchr", ] @@ -1359,7 +1277,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] @@ -1370,7 +1288,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] @@ -1380,7 +1298,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.0", + "hashbrown 0.14.2", "lock_api", "once_cell", "parking_lot_core", @@ -1407,10 +1325,11 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7684a49fb1af197853ef7b2ee694bc1f5b4179556f1e5710e1760c5db6f5e929" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" dependencies = [ + "powerfmt", "serde", ] @@ -1494,7 +1413,7 @@ name = "doc-generator" version = "0.1.0" dependencies = [ "askama", - "noirc_frontend 0.16.0", + "noirc_frontend", ] [[package]] @@ -1526,9 +1445,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" @@ -1564,9 +1483,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] @@ -1599,9 +1518,9 @@ dependencies = [ [[package]] name = "enumset" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e875f1719c16de097dee81ed675e2d9bb63096823ed3f0ca827b7dea3028bbbb" +checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d" dependencies = [ "enumset_derive", ] @@ -1615,7 +1534,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] @@ -1626,25 +1545,14 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" dependencies = [ - "errno-dragonfly", "libc", "windows-sys 0.48.0", ] -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "error-code" version = "2.3.1" @@ -1673,12 +1581,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fd-lock" @@ -1687,7 +1592,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5" dependencies = [ "cfg-if", - "rustix 0.38.4", + "rustix", "windows-sys 0.48.0", ] @@ -1736,9 +1641,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -1753,22 +1658,12 @@ dependencies = [ "num-traits", ] -[[package]] -name = "fm" -version = "0.16.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "codespan-reporting", - "rust-embed", - "serde", -] - [[package]] name = "fm" version = "0.18.0" dependencies = [ "codespan-reporting", - "iter-extended 0.18.0", + "iter-extended", "rust-embed", "serde", "tempfile", @@ -1797,9 +1692,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -1811,9 +1706,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -1821,44 +1716,44 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -1902,9 +1797,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "js-sys", @@ -1926,9 +1821,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "glob" @@ -1938,12 +1833,12 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1391ab1f92ffcc08911957149833e682aa3fe252b9f45f966d2ef972274c97df" +checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" dependencies = [ "aho-corasick", - "bstr 1.6.0", + "bstr 1.7.0", "fnv", "log", "regex", @@ -1997,9 +1892,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -2026,7 +1921,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", ] [[package]] @@ -2035,7 +1930,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", ] [[package]] @@ -2044,14 +1939,14 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.6", ] [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" [[package]] name = "heck" @@ -2070,9 +1965,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -2119,9 +2014,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humansize" @@ -2149,7 +2044,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -2158,9 +2053,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", @@ -2178,16 +2073,16 @@ checksum = "71a816c97c42258aa5834d07590b718b4c9a598944cd39a52dc25b351185d678" [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -2290,23 +2185,23 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.2", "serde", ] [[package]] name = "inferno" -version = "0.11.15" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fb7c1b80a1dfa604bb4a649a5c5aeef3d913f7c520cb42b40e534e8a61bcdfc" +checksum = "c50453ec3a6555fad17b1cd1a80d16af5bc7cb35094f64e429fd46549018c6a3" dependencies = [ - "ahash 0.8.3", - "indexmap 1.9.3", + "ahash 0.8.6", + "indexmap 2.1.0", "is-terminal", "itoa", "log", @@ -2317,31 +2212,11 @@ dependencies = [ "str_stack", ] -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" @@ -2350,15 +2225,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi", - "rustix 0.38.4", + "rustix", "windows-sys 0.48.0", ] -[[package]] -name = "iter-extended" -version = "0.16.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" - [[package]] name = "iter-extended" version = "0.18.0" @@ -2372,6 +2242,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -2422,33 +2301,38 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] -name = "linux-raw-sys" -version = "0.3.8" +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] [[package]] name = "linux-raw-sys" -version = "0.4.3" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -2456,9 +2340,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "louds-rs" @@ -2484,9 +2368,9 @@ dependencies = [ [[package]] name = "lsp-types" -version = "0.94.0" +version = "0.94.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b63735a13a1f9cd4f4835223d828ed9c2e35c8c5e61837774399f558b6a1237" +checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1" dependencies = [ "bitflags 1.3.2", "serde", @@ -2506,9 +2390,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memmap2" @@ -2519,6 +2403,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memmap2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.6.5" @@ -2579,9 +2472,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "wasi", @@ -2600,14 +2493,14 @@ version = "0.18.0" dependencies = [ "acvm", "codespan-reporting", - "fm 0.18.0", - "iter-extended 0.18.0", + "fm", + "iter-extended", "noirc_abi", "noirc_driver", - "noirc_errors 0.18.0", + "noirc_errors", "noirc_evaluator", - "noirc_frontend 0.18.0", - "noirc_printable_type 0.18.0", + "noirc_frontend", + "noirc_printable_type", "rustc_version", "serde", "thiserror", @@ -2617,7 +2510,7 @@ dependencies = [ name = "nargo_cli" version = "0.18.0" dependencies = [ - "acvm 0.30.0", + "acvm", "assert_cmd", "assert_fs", "async-lsp", @@ -2630,10 +2523,10 @@ dependencies = [ "const_format", "criterion", "dirs", - "fm 0.18.0", + "fm", "hex", "iai", - "iter-extended 0.18.0", + "iter-extended", "nargo", "nargo_fmt", "nargo_toml", @@ -2641,8 +2534,8 @@ dependencies = [ "noir_lsp", "noirc_abi", "noirc_driver", - "noirc_errors 0.18.0", - "noirc_frontend 0.18.0", + "noirc_errors", + "noirc_frontend", "paste", "pprof", "predicates 2.1.5", @@ -2666,7 +2559,7 @@ name = "nargo_fmt" version = "0.18.0" dependencies = [ "bytecount", - "noirc_frontend 0.18.0", + "noirc_frontend", "serde", "similar-asserts", "thiserror", @@ -2678,7 +2571,7 @@ name = "nargo_toml" version = "0.18.0" dependencies = [ "dirs", - "fm 0.18.0", + "fm", "nargo", "noirc_frontend", "semver", @@ -2712,26 +2605,25 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "static_assertions", ] [[package]] name = "noir_debugger" version = "0.18.0" dependencies = [ - "acvm 0.30.0", + "acvm", "codespan-reporting", "easy-repl", "nargo", - "noirc_errors 0.18.0", - "noirc_printable_type 0.18.0", + "noirc_errors", + "noirc_printable_type", "owo-colors", "thiserror", ] @@ -2740,17 +2632,17 @@ dependencies = [ name = "noir_lsp" version = "0.18.0" dependencies = [ - "acvm 0.30.0", + "acvm", "async-lsp", "cfg-if", "codespan-lsp", "codespan-reporting", - "lsp-types 0.94.0", + "lsp-types 0.94.1", "nargo", "nargo_toml", "noirc_driver", - "noirc_errors 0.18.0", - "noirc_frontend 0.18.0", + "noirc_errors", + "noirc_frontend", "serde", "serde_json", "tokio", @@ -2762,19 +2654,19 @@ dependencies = [ name = "noir_wasm" version = "0.18.0" dependencies = [ - "acvm 0.30.0", + "acvm", "build-data", "cfg-if", "console_error_panic_hook", - "fm 0.18.0", + "fm", "getrandom", "gloo-utils", "js-sys", "log", "nargo", "noirc_driver", - "noirc_errors 0.18.0", - "noirc_frontend 0.18.0", + "noirc_errors", + "noirc_frontend", "serde", "wasm-bindgen", "wasm-logger", @@ -2784,9 +2676,9 @@ dependencies = [ name = "noirc_abi" version = "0.18.0" dependencies = [ - "acvm 0.30.0", - "iter-extended 0.18.0", - "noirc_frontend 0.18.0", + "acvm", + "iter-extended", + "noirc_frontend", "num-bigint", "num-traits", "serde", @@ -2801,12 +2693,12 @@ dependencies = [ name = "noirc_abi_wasm" version = "0.18.0" dependencies = [ - "acvm 0.30.0", + "acvm", "build-data", "console_error_panic_hook", "getrandom", "gloo-utils", - "iter-extended 0.18.0", + "iter-extended", "js-sys", "noirc_abi", "serde", @@ -2821,39 +2713,25 @@ dependencies = [ "acvm", "build-data", "clap", - "fm 0.18.0", + "fm", "fxhash", - "iter-extended 0.18.0", + "iter-extended", "noirc_abi", - "noirc_errors 0.18.0", + "noirc_errors", "noirc_evaluator", - "noirc_frontend 0.18.0", - "serde", -] - -[[package]] -name = "noirc_errors" -version = "0.16.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acvm 0.28.0", - "chumsky", - "codespan", - "codespan-reporting", - "fm 0.16.0", + "noirc_frontend", "serde", - "serde_with", ] [[package]] name = "noirc_errors" version = "0.18.0" dependencies = [ - "acvm 0.30.0", + "acvm", "chumsky", "codespan", "codespan-reporting", - "fm 0.18.0", + "fm", "serde", "serde_with", ] @@ -2862,49 +2740,29 @@ dependencies = [ name = "noirc_evaluator" version = "0.18.0" dependencies = [ - "acvm 0.30.0", + "acvm", "fxhash", "im", - "iter-extended 0.18.0", + "iter-extended", "noirc_abi", - "noirc_errors 0.18.0", - "noirc_frontend 0.18.0", + "noirc_errors", + "noirc_frontend", "num-bigint", "serde", "thiserror", ] -[[package]] -name = "noirc_frontend" -version = "0.16.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acvm 0.28.0", - "arena 0.16.0", - "chumsky", - "fm 0.16.0", - "iter-extended 0.16.0", - "noirc_errors 0.16.0", - "noirc_printable_type 0.16.0", - "regex", - "rustc-hash", - "serde_json", - "small-ord-set", - "smol_str", - "thiserror", -] - [[package]] name = "noirc_frontend" version = "0.18.0" dependencies = [ - "acvm 0.30.0", - "arena 0.18.0", + "acvm", + "arena", "chumsky", - "fm 0.18.0", - "iter-extended 0.18.0", - "noirc_errors 0.18.0", - "noirc_printable_type 0.18.0", + "fm", + "iter-extended", + "noirc_errors", + "noirc_printable_type", "regex", "rustc-hash", "serde", @@ -2916,25 +2774,12 @@ dependencies = [ "thiserror", ] -[[package]] -name = "noirc_printable_type" -version = "0.16.0" -source = "git+https://github.com/Sakapoi/noir_fork.git?branch=doc_comments#928eae80edde911af8890040578e9d98daac190c" -dependencies = [ - "acvm 0.28.0", - "iter-extended 0.16.0", - "regex", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "noirc_printable_type" version = "0.18.0" dependencies = [ - "acvm 0.30.0", - "iter-extended 0.18.0", + "acvm", + "iter-extended", "regex", "serde", "serde_json", @@ -2959,9 +2804,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -2990,9 +2835,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", "libm", @@ -3010,9 +2855,9 @@ dependencies = [ [[package]] name = "object" -version = "0.31.1" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -3058,15 +2903,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -3127,9 +2972,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -3181,6 +3026,12 @@ dependencies = [ "plotters-backend", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "pprof" version = "0.12.1" @@ -3194,7 +3045,7 @@ dependencies = [ "inferno", "libc", "log", - "nix 0.26.2", + "nix 0.26.4", "once_cell", "parking_lot", "smallvec", @@ -3217,7 +3068,7 @@ checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" dependencies = [ "difflib", "float-cmp", - "itertools", + "itertools 0.10.5", "normalize-line-endings", "predicates-core", "regex", @@ -3225,13 +3076,13 @@ dependencies = [ [[package]] name = "predicates" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9" +checksum = "6dfc28575c2e3f19cb3c73b93af36460ae898d426eba6fc15b9bd2a5220758a0" dependencies = [ "anstyle", "difflib", - "itertools", + "itertools 0.11.0", "predicates-core", ] @@ -3297,28 +3148,28 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" +checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" dependencies = [ "bit-set", - "bitflags 1.3.2", - "byteorder", + "bit-vec", + "bitflags 2.4.1", "lazy_static", "num-traits", "rand", "rand_chacha", "rand_xorshift", - "regex-syntax 0.6.29", + "regex-syntax 0.7.5", "rusty-fork", "tempfile", "unarray", @@ -3361,9 +3212,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.31" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -3454,30 +3305,30 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "libredox", "thiserror", ] @@ -3495,14 +3346,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.3", - "regex-syntax 0.7.4", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -3513,26 +3364,26 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.8.2", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "region" @@ -3548,18 +3399,18 @@ dependencies = [ [[package]] name = "rend" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" +checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" dependencies = [ "bytecheck", ] [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ "base64", "bytes", @@ -3583,6 +3434,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-rustls", "tower-service", @@ -3607,26 +3459,25 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.36" +version = "0.8.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" dependencies = [ "bytemuck", ] [[package]] name = "ring" -version = "0.16.20" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" dependencies = [ "cc", + "getrandom", "libc", - "once_cell", "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -3679,7 +3530,7 @@ dependencies = [ "quote", "rust-embed-utils", "shellexpand", - "syn 2.0.32", + "syn 2.0.39", "walkdir", ] @@ -3717,36 +3568,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.4" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "errno", "libc", - "linux-raw-sys 0.4.3", + "linux-raw-sys", "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.21.7" +version = "0.21.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" dependencies = [ "log", "ring", @@ -3765,9 +3602,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.101.4" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ "ring", "untrusted", @@ -3839,11 +3676,11 @@ checksum = "077d73db7973cccf63eb4aff1e5a34dc2459baa867512088269ea5f2f4253c90" [[package]] name = "safe-proc-macro2" -version = "1.0.36" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "814c536dcd27acf03296c618dab7ad62d28e70abd7ba41d3f34a2ce707a2c666" +checksum = "7fd85be67db87168aa3c13fd0da99f48f2ab005dccad5af5626138dc1df20eb6" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -3907,9 +3744,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "ring", "untrusted", @@ -3946,9 +3783,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.190" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] @@ -3991,20 +3828,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.190" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] name = "serde_json" -version = "1.0.103" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -4013,20 +3850,20 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.14" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731" +checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] @@ -4045,15 +3882,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.2.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1402f54f9a3b9e2efe71c1cea24e648acce55887983553eeb858cf3115acfd49" +checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.0.0", + "indexmap 2.1.0", "serde", "serde_json", "serde_with_macros", @@ -4062,21 +3899,21 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.2.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9197f1ad0e3c173a0222d3c4404fb04c3afe87e962bcb327af73e8301fa203c7" +checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -4095,9 +3932,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -4171,9 +4008,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -4195,9 +4032,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "smawk" @@ -4216,19 +4053,29 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", ] +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "spin" -version = "0.5.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "spki" @@ -4246,12 +4093,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "str-buf" version = "1.0.6" @@ -4297,21 +4138,21 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "symbolic-common" -version = "12.3.0" +version = "12.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167a4ffd7c35c143fd1030aa3c2caf76ba42220bd5a6b5f4781896434723b8c3" +checksum = "6d3aa424281de488c1ddbaffb55a421ad87d04b0fdd5106e7e71d748c0c71ea6" dependencies = [ "debugid", - "memmap2", + "memmap2 0.8.0", "stable_deref_trait", "uuid", ] [[package]] name = "symbolic-demangle" -version = "12.3.0" +version = "12.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e378c50e80686c1c5c205674e1f86a2858bec3d2a7dfdd690331a8a19330f293" +checksum = "9bdcf77effe2908a21c1011b4d49a7122e0f44487a6ad89db67c55a1687e2572" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -4331,15 +4172,36 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.32" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -4359,21 +4221,20 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.11" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" +checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" [[package]] name = "tempfile" -version = "3.6.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ - "autocfg", "cfg-if", "fastrand", - "redox_syscall 0.3.5", - "rustix 0.37.23", + "redox_syscall 0.4.1", + "rustix", "windows-sys 0.48.0", ] @@ -4390,9 +4251,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] @@ -4439,22 +4300,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.43" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.43" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] @@ -4469,12 +4330,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.25" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fdd63d58b18d663fbdf70e049f00a22c8e42be082203be7f26589213cd75ea" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ "deranged", "itoa", + "powerfmt", "serde", "time-core", "time-macros", @@ -4482,15 +4344,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] @@ -4522,18 +4384,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", "mio", "num_cpus", "pin-project-lite", - "socket2", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] @@ -4546,7 +4407,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] @@ -4561,9 +4422,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -4576,9 +4437,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", "serde_spanned", @@ -4588,20 +4449,20 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -4633,11 +4494,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -4646,20 +4506,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -4703,9 +4563,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unarray" @@ -4730,9 +4590,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-linebreak" @@ -4757,9 +4617,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -4769,15 +4629,15 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -4793,9 +4653,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" [[package]] name = "valuable" @@ -4824,15 +4684,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54f8c3c56044fc359f905b72879576a15d49c46d085ed6266a98826716f14033" dependencies = [ - "rustix 0.38.4", + "rustix", "windows-sys 0.48.0", ] [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -4876,7 +4736,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", "wasm-bindgen-shared", ] @@ -4933,7 +4793,7 @@ checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4970,9 +4830,9 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.33.1" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39de0723a53d3c8f54bed106cfbc0d06b3e4d945c5c5022115a61e3b29183ae" +checksum = "822b645bf4f2446b949776ffca47e2af60b167209ffb70814ef8779d299cd421" dependencies = [ "leb128", ] @@ -5030,7 +4890,7 @@ dependencies = [ "enumset", "lazy_static", "leb128", - "memmap2", + "memmap2 0.5.10", "more-asserts", "region", "smallvec", @@ -5133,9 +4993,9 @@ dependencies = [ [[package]] name = "wast" -version = "65.0.1" +version = "67.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd8c1cbadf94a0b0d1071c581d3cfea1b7ed5192c79808dd15406e508dd0afb" +checksum = "a974d82fac092b5227c1663e16514e7a85f32014e22e6fdcb08b71aec9d3fb1e" dependencies = [ "leb128", "memchr", @@ -5145,9 +5005,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3209e35eeaf483714f4c6be93f4a03e69aad5f304e3fa66afa7cb90fe1c8051f" +checksum = "adb220934f92f8551144c0003d1bc57a060674c99139f45ed623fbbf6d9262e7" dependencies = [ "wast", ] @@ -5186,9 +5046,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -5200,12 +5060,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -5236,7 +5096,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -5256,17 +5116,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -5277,9 +5137,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -5295,9 +5155,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -5313,9 +5173,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -5331,9 +5191,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -5349,9 +5209,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" @@ -5361,9 +5221,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -5379,15 +5239,15 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.0" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -5420,6 +5280,26 @@ dependencies = [ "libc", ] +[[package]] +name = "zerocopy" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "zeroize" version = "1.6.0" @@ -5437,5 +5317,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.39", ] diff --git a/tooling/doc_generator/Cargo.toml b/tooling/doc_generator/Cargo.toml index 72346a37b8a..779000564b8 100644 --- a/tooling/doc_generator/Cargo.toml +++ b/tooling/doc_generator/Cargo.toml @@ -7,4 +7,4 @@ edition = "2021" [dependencies] askama = "0.12" -noirc_frontend = {git = "https://github.com/Sakapoi/noir_fork.git", branch = "doc_comments"} \ No newline at end of file +noirc_frontend = { path = "../../compiler/noirc_frontend" } diff --git a/tooling/doc_generator/input_files/impl_example.nr b/tooling/doc_generator/input_files/impl_example.nr new file mode 100644 index 00000000000..4c3d1c3a63c --- /dev/null +++ b/tooling/doc_generator/input_files/impl_example.nr @@ -0,0 +1,8 @@ +// Map + struct B {} + +impl B { + fn new(new_concrete_t_c_constructor: fn () -> T_C) -> B { + B { new_concrete_t_c_constructor } + } +} \ No newline at end of file diff --git a/tooling/doc_generator/input_files/prog.nr b/tooling/doc_generator/input_files/prog.nr index beb94a7ae1a..715b17cf45d 100644 --- a/tooling/doc_generator/input_files/prog.nr +++ b/tooling/doc_generator/input_files/prog.nr @@ -45,6 +45,8 @@ comments */ fn another_fn(){} +/// com 1 +/// com 2 pub struct AnotherStruct { pub name: String, pub number: i32, @@ -242,3 +244,23 @@ mod MyModule { mod another_module; fn yes () {} + +struct GrumpkinScalar { + low: Field, + high: Field, +} + +struct B {} + + +fn sss(new_concrete_t_c_constructor: fn () -> T_C) -> B { + B { new_concrete_t_c_constructor } +} + +impl B { + fn new(new_concrete_t_c_constructor: fn () -> T_C) -> B { + B { new_concrete_t_c_constructor } + } +} + +fn abc(){} diff --git a/tooling/doc_generator/input_files/struct_example.nr b/tooling/doc_generator/input_files/struct_example.nr index a4d4cacf5c6..30c5624112e 100644 --- a/tooling/doc_generator/input_files/struct_example.nr +++ b/tooling/doc_generator/input_files/struct_example.nr @@ -2,4 +2,9 @@ struct MyStruct { mana: i32, name: String, +} + +struct GrumpkinScalar { + low: Field, + high: Field, } \ No newline at end of file diff --git a/tooling/doc_generator/src/getters.rs b/tooling/doc_generator/src/getters.rs index 83a63cb8916..256fd624ba9 100644 --- a/tooling/doc_generator/src/getters.rs +++ b/tooling/doc_generator/src/getters.rs @@ -7,7 +7,7 @@ use askama::Template; use noirc_frontend::{ hir::resolution::errors::Span, lexer::Lexer, - token::{DocComments, Keyword, SpannedToken, Token}, + token::{Keyword, SpannedToken, Token, DocStyle}, }; use crate::{Function, Output}; @@ -139,12 +139,12 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { let mut is_private = true; loop { - match &tokens[i + 1] { + match &tokens[i] { Token::LeftBrace => { res.push_str("{"); res.push_str("\n"); loop { - match tokens[i + 1] { + match tokens[i] { Token::RightBrace => { if is_private { res.push_str("/* private fields */"); @@ -156,9 +156,9 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { Token::Keyword(Keyword::Pub) => { is_private = false; loop { - match tokens[i + 1] { + match tokens[i] { Token::Comma => { - if tokens[i + 2] == Token::RightBrace { + if tokens[i + 1] == Token::RightBrace { res.push_str(","); } else { res.push_str(",\n"); @@ -170,7 +170,7 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { break; } _ => { - res.push_str(&tokens[i + 1].to_string()); + res.push_str(&tokens[i].to_string()); res.push_str(" "); i += 1; } @@ -185,7 +185,7 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { break; } _ => { - res.push_str(&tokens[i + 1].to_string()); + res.push_str(&tokens[i].to_string()); res.push_str(" "); i += 1; } @@ -301,14 +301,19 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec String { + if index == 0 { + return "".to_string(); + } let res = match &tokens[index - 1] { - Token::DocComment(DocComments::Outer(dc)) => { + Token::LineComment(dc, Some(DocStyle::Inner)) + | Token::BlockComment(dc, Some(DocStyle::Inner))=> { let mut res = dc.to_string(); let mut doc_end = true; let mut iter = 2; while doc_end && ((index as i32) - (iter as i32)) >= 0 { match &tokens[index - iter] { - Token::DocComment(DocComments::Outer(doc)) => { + Token::LineComment(doc, Some(DocStyle::Inner)) + | Token::BlockComment(doc, Some(DocStyle::Inner))=> { res.insert_str(0, &doc.to_string()); iter += 1; } @@ -326,7 +331,7 @@ pub(crate) fn additional_doc(tokens: &[Token], index: usize) -> String { let mut iter = 2; while doc_find && ((index as i32) - (iter as i32)) >= 0 { match &tokens[index - iter] { - Token::DocComment(DocComments::Outer(doc)) => { + Token::LineComment(doc, Some(DocStyle::Inner)) => { res.insert_str(0, &doc.to_string()); iter += 1; } @@ -359,14 +364,13 @@ pub(crate) fn doc(tokens: &[Token], index: usize) -> String { return String::new(); } let res = match &tokens[index - 1] { - Token::DocComment(DocComments::Single(dc)) | Token::DocComment(DocComments::Block(dc)) => { + Token::LineComment(dc, _) | Token::BlockComment(dc, _) => { let mut res = dc.to_string(); let mut doc_end = true; let mut iter = 2; while doc_end && ((index as i32) - (iter as i32)) >= 0 { match &tokens[index - iter] { - Token::DocComment(DocComments::Single(doc)) - | Token::DocComment(DocComments::Block(doc)) => { + Token::LineComment(doc, None) | Token::BlockComment(doc, None) => { res.insert_str(0, &doc.to_string()); iter += 1; } @@ -384,8 +388,7 @@ pub(crate) fn doc(tokens: &[Token], index: usize) -> String { let mut iter = 2; while doc_find && ((index as i32) - (iter as i32)) >= 0 { match &tokens[index - iter] { - Token::DocComment(DocComments::Single(doc)) - | Token::DocComment(DocComments::Block(doc)) => { + Token::LineComment(doc, Some(DocStyle::Outer)) | Token::BlockComment(doc, Some(DocStyle::Outer)) => { res.insert_str(0, &doc.to_string()); iter += 1; } @@ -420,7 +423,7 @@ pub(crate) fn outer_doc(tokens: &[Token], index: usize) -> (String, usize) { let mut doc_find = true; while doc_find { match &tokens[i + 1] { - Token::DocComment(DocComments::Outer(doc)) => { + Token::LineComment(doc, Some(DocStyle::Inner)) | Token::BlockComment(doc, Some(DocStyle::Inner)) => { res.push_str(doc); i += 1; } diff --git a/tooling/doc_generator/src/output.rs b/tooling/doc_generator/src/output.rs index 5075cd9e521..dc9850221c6 100644 --- a/tooling/doc_generator/src/output.rs +++ b/tooling/doc_generator/src/output.rs @@ -1,6 +1,6 @@ use std::fmt; -use noirc_frontend::token::{DocComments, Keyword, SpannedToken, Token}; +use noirc_frontend::token::{Keyword, SpannedToken, Token, DocStyle}; use crate::{ additional_doc, doc, fn_signature, get_module_content, outer_doc, skip_impl_block, @@ -161,7 +161,7 @@ impl Output { } }; let doc = doc(&tokens, i); - let sign = struct_signature(&tokens, i - 1); + let sign = struct_signature(&tokens, i); let ad_doc = additional_doc(&tokens, i); Output { @@ -221,7 +221,7 @@ impl Output { Output { r#type, name, doc, information: Info::Module { content } } } - Token::DocComment(DocComments::Outer(_)) => { + Token::LineComment(_, Some(DocStyle::Inner)) | Token::BlockComment(_, Some(DocStyle::Inner)) => { let r#type = Type::OuterComment; let name = "".to_string(); diff --git a/tooling/doc_generator/src/pages_generation.rs b/tooling/doc_generator/src/pages_generation.rs index 16e18c54213..ac29ce8bfdc 100644 --- a/tooling/doc_generator/src/pages_generation.rs +++ b/tooling/doc_generator/src/pages_generation.rs @@ -130,6 +130,7 @@ impl Implementation { let name = match &tokens[i + 1] { Token::Ident(idn) => idn.clone(), _ => { + i+=1; continue; } }; From cd766d5f43c15f92cdee9022b03e57739fe0a797 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Wed, 8 Nov 2023 16:34:08 +0200 Subject: [PATCH 08/19] fmt --- tooling/doc_generator/src/getters.rs | 16 +++++++++------- tooling/doc_generator/src/output.rs | 5 +++-- tooling/doc_generator/src/pages_generation.rs | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/tooling/doc_generator/src/getters.rs b/tooling/doc_generator/src/getters.rs index 256fd624ba9..824f6b218e5 100644 --- a/tooling/doc_generator/src/getters.rs +++ b/tooling/doc_generator/src/getters.rs @@ -7,7 +7,7 @@ use askama::Template; use noirc_frontend::{ hir::resolution::errors::Span, lexer::Lexer, - token::{Keyword, SpannedToken, Token, DocStyle}, + token::{DocStyle, Keyword, SpannedToken, Token}, }; use crate::{Function, Output}; @@ -305,15 +305,15 @@ pub(crate) fn additional_doc(tokens: &[Token], index: usize) -> String { return "".to_string(); } let res = match &tokens[index - 1] { - Token::LineComment(dc, Some(DocStyle::Inner)) - | Token::BlockComment(dc, Some(DocStyle::Inner))=> { + Token::LineComment(dc, Some(DocStyle::Inner)) + | Token::BlockComment(dc, Some(DocStyle::Inner)) => { let mut res = dc.to_string(); let mut doc_end = true; let mut iter = 2; while doc_end && ((index as i32) - (iter as i32)) >= 0 { match &tokens[index - iter] { - Token::LineComment(doc, Some(DocStyle::Inner)) - | Token::BlockComment(doc, Some(DocStyle::Inner))=> { + Token::LineComment(doc, Some(DocStyle::Inner)) + | Token::BlockComment(doc, Some(DocStyle::Inner)) => { res.insert_str(0, &doc.to_string()); iter += 1; } @@ -388,7 +388,8 @@ pub(crate) fn doc(tokens: &[Token], index: usize) -> String { let mut iter = 2; while doc_find && ((index as i32) - (iter as i32)) >= 0 { match &tokens[index - iter] { - Token::LineComment(doc, Some(DocStyle::Outer)) | Token::BlockComment(doc, Some(DocStyle::Outer)) => { + Token::LineComment(doc, Some(DocStyle::Outer)) + | Token::BlockComment(doc, Some(DocStyle::Outer)) => { res.insert_str(0, &doc.to_string()); iter += 1; } @@ -423,7 +424,8 @@ pub(crate) fn outer_doc(tokens: &[Token], index: usize) -> (String, usize) { let mut doc_find = true; while doc_find { match &tokens[i + 1] { - Token::LineComment(doc, Some(DocStyle::Inner)) | Token::BlockComment(doc, Some(DocStyle::Inner)) => { + Token::LineComment(doc, Some(DocStyle::Inner)) + | Token::BlockComment(doc, Some(DocStyle::Inner)) => { res.push_str(doc); i += 1; } diff --git a/tooling/doc_generator/src/output.rs b/tooling/doc_generator/src/output.rs index dc9850221c6..4422ee74743 100644 --- a/tooling/doc_generator/src/output.rs +++ b/tooling/doc_generator/src/output.rs @@ -1,6 +1,6 @@ use std::fmt; -use noirc_frontend::token::{Keyword, SpannedToken, Token, DocStyle}; +use noirc_frontend::token::{DocStyle, Keyword, SpannedToken, Token}; use crate::{ additional_doc, doc, fn_signature, get_module_content, outer_doc, skip_impl_block, @@ -221,7 +221,8 @@ impl Output { Output { r#type, name, doc, information: Info::Module { content } } } - Token::LineComment(_, Some(DocStyle::Inner)) | Token::BlockComment(_, Some(DocStyle::Inner)) => { + Token::LineComment(_, Some(DocStyle::Inner)) + | Token::BlockComment(_, Some(DocStyle::Inner)) => { let r#type = Type::OuterComment; let name = "".to_string(); diff --git a/tooling/doc_generator/src/pages_generation.rs b/tooling/doc_generator/src/pages_generation.rs index ac29ce8bfdc..a95dc98b9ec 100644 --- a/tooling/doc_generator/src/pages_generation.rs +++ b/tooling/doc_generator/src/pages_generation.rs @@ -130,7 +130,7 @@ impl Implementation { let name = match &tokens[i + 1] { Token::Ident(idn) => idn.clone(), _ => { - i+=1; + i += 1; continue; } }; From 415c673cfe0a3607492aa65ff76f84f98b329694 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Wed, 8 Nov 2023 18:01:55 +0200 Subject: [PATCH 09/19] added cli --- Cargo.lock | 141 ++++++++++++++++++++++++------ tooling/doc_generator/Cargo.toml | 1 + tooling/doc_generator/src/main.rs | 37 +++++++- 3 files changed, 149 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d53cb001323..48c2d89c8db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -452,6 +452,17 @@ dependencies = [ "waitpid-any", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -835,6 +846,23 @@ dependencies = [ "half", ] +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_derive 3.2.25", + "clap_lex 0.2.4", + "indexmap 1.9.3", + "once_cell", + "strsim", + "termcolor", + "textwrap 0.16.0", +] + [[package]] name = "clap" version = "4.4.7" @@ -842,7 +870,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" dependencies = [ "clap_builder", - "clap_derive", + "clap_derive 4.4.7", ] [[package]] @@ -853,10 +881,23 @@ checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" dependencies = [ "anstream", "anstyle", - "clap_lex", + "clap_lex 0.6.0", "strsim", ] +[[package]] +name = "clap_derive" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "clap_derive" version = "4.4.7" @@ -869,6 +910,15 @@ dependencies = [ "syn 2.0.39", ] +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + [[package]] name = "clap_lex" version = "0.6.0" @@ -1153,7 +1203,7 @@ dependencies = [ "anes", "cast", "ciborium", - "clap", + "clap 4.4.7", "criterion-plot", "is-terminal", "itertools 0.10.5", @@ -1423,6 +1473,7 @@ name = "doc-generator" version = "0.1.0" dependencies = [ "askama", + "clap 3.2.25", "noirc_frontend", ] @@ -1555,9 +1606,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" dependencies = [ "libc", "windows-sys 0.48.0", @@ -1973,6 +2024,15 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.3" @@ -2234,7 +2294,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.3", "rustix", "windows-sys 0.48.0", ] @@ -2334,7 +2394,7 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.3" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" @@ -2422,6 +2482,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memmap2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.6.5" @@ -2528,7 +2597,7 @@ dependencies = [ "barretenberg_blackbox_solver", "bb_abstraction_leaks", "build-data", - "clap", + "clap 4.4.7", "color-eyre", "const_format", "criterion", @@ -2722,7 +2791,7 @@ version = "0.19.2" dependencies = [ "acvm", "build-data", - "clap", + "clap 4.4.7", "fm", "fxhash", "iter-extended", @@ -2859,7 +2928,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.3", "libc", ] @@ -2884,6 +2953,12 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + [[package]] name = "owo-colors" version = "3.5.0" @@ -3173,13 +3248,13 @@ checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.3.3", + "bitflags 2.4.1", "lazy_static", "num-traits", "rand", "rand_chacha", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.7.5", "rusty-fork", "tempfile", "unarray", @@ -3362,8 +3437,8 @@ checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.3", - "regex-syntax", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -3380,12 +3455,18 @@ checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.2", ] [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" @@ -3572,7 +3653,7 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.4" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ @@ -3793,9 +3874,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.179" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5bf42b8d227d4abf38a1ddb08602e229108a517cd4e5bb28f9c7eaafdce5c0" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] @@ -3838,9 +3919,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.179" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "741e124f5485c7e60c03b043f79f320bff3527f4bbf12cf3831750dc46a0ec2c" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", @@ -4163,7 +4244,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d3aa424281de488c1ddbaffb55a421ad87d04b0fdd5106e7e71d748c0c71ea6" dependencies = [ "debugid", - "memmap2 0.5.10", + "memmap2 0.8.0", "stable_deref_trait", "uuid", ] @@ -4247,13 +4328,13 @@ checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "rustix", "windows-sys 0.48.0", ] @@ -4318,6 +4399,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + [[package]] name = "thiserror" version = "1.0.50" @@ -5087,9 +5174,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.50.0" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af6041b3f84485c21b57acdc0fee4f4f0c93f426053dc05fa5d6fc262537bbff" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ "windows-targets 0.48.5", ] diff --git a/tooling/doc_generator/Cargo.toml b/tooling/doc_generator/Cargo.toml index 779000564b8..8c02bebdda8 100644 --- a/tooling/doc_generator/Cargo.toml +++ b/tooling/doc_generator/Cargo.toml @@ -7,4 +7,5 @@ edition = "2021" [dependencies] askama = "0.12" +clap = { version = "3.2.0", features = ["derive", "cargo"] } noirc_frontend = { path = "../../compiler/noirc_frontend" } diff --git a/tooling/doc_generator/src/main.rs b/tooling/doc_generator/src/main.rs index 60c97870f31..8acbc32ca5e 100644 --- a/tooling/doc_generator/src/main.rs +++ b/tooling/doc_generator/src/main.rs @@ -7,6 +7,7 @@ use getters::*; use output::*; use pages_generation::*; use std::collections::HashMap; +use clap::{Parser, Subcommand}; /// Generates documentation from the source code in the specified input file. @@ -57,8 +58,38 @@ pub fn get_map(input_file: &str) -> Map { Map { map } } -fn main() { - generate_doc("input_files/prog.nr").unwrap(); +/// Generates documentation pages based on `Noir` code +#[derive(Parser)] +#[clap(author, version, about, long_about = None)] +#[clap(propagate_version = true)] +struct Klee { + #[clap(subcommand)] + command: Commands, +} - dbg!(get_map("input_files/struct_example.nr")); +#[derive(Subcommand)] +enum Commands { + /// Generates documentation from the source code in the specified input file. + GenerateDoc { + #[clap(value_parser)] + filename: String, + }, + /// Retrieves and maps necessary information to documentation from a `Noir` code file. + GetMap { + #[clap(value_parser)] + filename: String, + } +} + +fn main() { + let cli = Klee::parse(); + + match &cli.command { + Commands::GenerateDoc { filename } => { + generate_doc(filename).unwrap(); + }, + Commands::GetMap { filename } => { + println!("{:#?}", get_map(filename)); + }, + } } From e3074f55bd6e869cbaf3edcb9e3586049a4edb00 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Thu, 9 Nov 2023 00:11:23 +0200 Subject: [PATCH 10/19] added tests --- .../input_files/function_example.nr | 3 --- .../input_files/struct_example.nr | 6 ------ .../input_files/trait_example.nr | 2 ++ tooling/doc_generator/src/tests.rs | 19 +++++++++++++++++-- 4 files changed, 19 insertions(+), 11 deletions(-) create mode 100644 tooling/doc_generator/input_files/trait_example.nr diff --git a/tooling/doc_generator/input_files/function_example.nr b/tooling/doc_generator/input_files/function_example.nr index fbc5e1481ef..e8357417049 100644 --- a/tooling/doc_generator/input_files/function_example.nr +++ b/tooling/doc_generator/input_files/function_example.nr @@ -1,7 +1,4 @@ ///doc comment -/* - This is a block comment describing a complex function. -*/ fn main(x : Field, y : pub Field) { assert(x != y); } \ No newline at end of file diff --git a/tooling/doc_generator/input_files/struct_example.nr b/tooling/doc_generator/input_files/struct_example.nr index 30c5624112e..90e8ff2b8a9 100644 --- a/tooling/doc_generator/input_files/struct_example.nr +++ b/tooling/doc_generator/input_files/struct_example.nr @@ -1,9 +1,3 @@ -///struct -struct MyStruct { - mana: i32, - name: String, -} - struct GrumpkinScalar { low: Field, high: Field, diff --git a/tooling/doc_generator/input_files/trait_example.nr b/tooling/doc_generator/input_files/trait_example.nr new file mode 100644 index 00000000000..288daf01b04 --- /dev/null +++ b/tooling/doc_generator/input_files/trait_example.nr @@ -0,0 +1,2 @@ +trait MyTrait { +} \ No newline at end of file diff --git a/tooling/doc_generator/src/tests.rs b/tooling/doc_generator/src/tests.rs index f1cfa3c07cb..c745bebad93 100644 --- a/tooling/doc_generator/src/tests.rs +++ b/tooling/doc_generator/src/tests.rs @@ -14,6 +14,21 @@ mod tests { assert!(generate_doc("input_files/prog.nr").is_ok()); } + #[test] + fn impl_example() { + assert!(generate_doc("input_files/impl_example.nr").is_ok()); + } + + #[test] + fn trait_example() { + assert!(generate_doc("input_files/trait_example.nr").is_ok()); + } + + #[test] + fn struct_example() { + assert!(generate_doc("input_files/struct_example.nr").is_ok()); + } + #[test] fn function_output() { let mut map = HashMap::new(); @@ -32,11 +47,11 @@ mod tests { let mut map = HashMap::new(); map.insert( Info::Struct { - signature: "struct MyStruct {\n/* private fields */\n}".to_string(), + signature: "struct GrumpkinScalar {\n/* private fields */\n}".to_string(), additional_doc: "".to_string(), implementations: vec![], }, - "struct".to_string(), + "".to_string(), ); let result = Map { map }; From ac81b1db0ee8f0269d6b4af99189d97bebd72eb3 Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Thu, 9 Nov 2023 00:12:16 +0200 Subject: [PATCH 11/19] fmt --- tooling/doc_generator/src/main.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tooling/doc_generator/src/main.rs b/tooling/doc_generator/src/main.rs index 8acbc32ca5e..4fbfb75d977 100644 --- a/tooling/doc_generator/src/main.rs +++ b/tooling/doc_generator/src/main.rs @@ -3,11 +3,11 @@ mod output; mod pages_generation; mod tests; +use clap::{Parser, Subcommand}; use getters::*; use output::*; use pages_generation::*; use std::collections::HashMap; -use clap::{Parser, Subcommand}; /// Generates documentation from the source code in the specified input file. @@ -78,7 +78,7 @@ enum Commands { GetMap { #[clap(value_parser)] filename: String, - } + }, } fn main() { @@ -87,9 +87,9 @@ fn main() { match &cli.command { Commands::GenerateDoc { filename } => { generate_doc(filename).unwrap(); - }, + } Commands::GetMap { filename } => { println!("{:#?}", get_map(filename)); - }, + } } } From bf7be718f082027d205feabc69eda1214b308bec Mon Sep 17 00:00:00 2001 From: Sakapoi Date: Wed, 15 Nov 2023 04:06:04 +0200 Subject: [PATCH 12/19] removed panics and fixed problems --- tooling/doc_generator/Cargo.toml | 3 +- tooling/doc_generator/src/getters.rs | 31 ++--- tooling/doc_generator/src/main.rs | 53 +++++++-- tooling/doc_generator/src/output.rs | 22 ++-- tooling/doc_generator/src/pages_generation.rs | 110 +++++++++++------- tooling/doc_generator/src/tests.rs | 4 +- 6 files changed, 141 insertions(+), 82 deletions(-) diff --git a/tooling/doc_generator/Cargo.toml b/tooling/doc_generator/Cargo.toml index 8c02bebdda8..600e21413d9 100644 --- a/tooling/doc_generator/Cargo.toml +++ b/tooling/doc_generator/Cargo.toml @@ -7,5 +7,6 @@ edition = "2021" [dependencies] askama = "0.12" +thiserror = "1.0.21" clap = { version = "3.2.0", features = ["derive", "cargo"] } -noirc_frontend = { path = "../../compiler/noirc_frontend" } +noirc_frontend.workspace = true diff --git a/tooling/doc_generator/src/getters.rs b/tooling/doc_generator/src/getters.rs index 824f6b218e5..e7a1ccb634b 100644 --- a/tooling/doc_generator/src/getters.rs +++ b/tooling/doc_generator/src/getters.rs @@ -19,7 +19,10 @@ use crate::{Function, Output}; /// begins at the index `index` and may be terminated by either semicolons `;` or curly braces `{}`. /// If the module is terminated by semicolons `;`, the function loads the module content from a file /// whose name is specified before the semicolon in the list of tokens. -pub(crate) fn get_module_content(tokens: &[Token], index: usize) -> Vec { +pub(crate) fn get_module_content( + tokens: &[Token], + index: usize, +) -> Result, crate::DocError> { let mut content = Vec::new(); let mut i = index; let mut brace_counter = 0; @@ -28,7 +31,7 @@ pub(crate) fn get_module_content(tokens: &[Token], index: usize) -> Vec match &tokens[i] { Token::Semicolon => { let filename = format!("input_files/{}.nr", tokens[i - 1]); - content = get_doc(&filename).unwrap(); + content = get_doc(&filename).map_err(|_| crate::DocError::GetDocError)?; break; } Token::LeftBrace => { @@ -63,9 +66,9 @@ pub(crate) fn get_module_content(tokens: &[Token], index: usize) -> Vec }; } - let res = Output::to_output(content); + let res = Output::to_output(content)?; - res + Ok(res) } /// Skips an implementation block within a list of tokens, starting at the given index. @@ -449,15 +452,15 @@ pub(crate) fn outer_doc(tokens: &[Token], index: usize) -> (String, usize) { /// The `get_doc` function reads the content of a source file specified by the `input_file` path, /// tokenizes the content, and returns the resulting vector of spanned tokens. This function is /// typically used for processing source code and extracting tokens for further analysis or documentation. -pub(crate) fn get_doc(input_file: &str) -> Result, Box> { - let mut file = File::open(input_file)?; +pub(crate) fn get_doc(input_file: &str) -> Result, crate::DocError> { + let mut file = File::open(input_file).map_err(|_| crate::DocError::FileEditError)?; let mut contents = String::new(); - file.read_to_string(&mut contents)?; - - let mut lexer = Lexer::new(&contents); - lexer = lexer.skip_comments(false); + file.read_to_string(&mut contents).map_err(|_| crate::DocError::FileEditError)?; - let token = lexer.into_iter().map(|a| a.unwrap()).collect::>(); + let token = Lexer::new(&contents) + .skip_comments(false) + .collect::, _>>() + .map_err(|_| crate::DocError::GetTokensError)?; Ok(token) } @@ -488,15 +491,15 @@ pub(crate) struct CodeLine { /// The `get_text` function reads the content of a text file specified by the `input_file` path, /// and converts each line of text into a `CodeLine` structure. The resulting `CodeLine` structures /// are collected in a vector, making it easy to work with text content as a collection of code lines. -pub(crate) fn get_text(input_file: &str) -> Result, Box> { - let file = File::open(input_file)?; +pub(crate) fn get_text(input_file: &str) -> Result, crate::DocError> { + let file = File::open(input_file).map_err(|_| crate::DocError::FileEditError)?; let reader = BufReader::new(file); let mut code = Vec::new(); let mut i = 0; for line in reader.lines() { i += 1; - code.push(CodeLine { number: i, text: line? }); + code.push(CodeLine { number: i, text: line.map_err(|_| crate::DocError::FileEditError)? }); } Ok(code) diff --git a/tooling/doc_generator/src/main.rs b/tooling/doc_generator/src/main.rs index 4fbfb75d977..6da501fad37 100644 --- a/tooling/doc_generator/src/main.rs +++ b/tooling/doc_generator/src/main.rs @@ -8,6 +8,35 @@ use getters::*; use output::*; use pages_generation::*; use std::collections::HashMap; +use thiserror::Error; + +#[derive(Debug, Error)] +#[error("Documentation error")] +pub enum DocError { + #[error("Failed to get documentation from file")] + GetDocError, + + #[error("Failed to extract filename")] + ExtractFilenameError, + + #[error("Failed to generate module page")] + GenerateModulePageError, + + #[error("Failed to create new file")] + FileCreateError, + + #[error("Failed to edit file")] + FileEditError, + + #[error("Failed to render an object")] + RenderError, + + #[error("Failed to get information")] + GetInfoError, + + #[error("Failed to get tokens")] + GetTokensError, +} /// Generates documentation from the source code in the specified input file. @@ -15,14 +44,14 @@ use std::collections::HashMap; /// generates documentation based on the code's structure and comments. The resulting documentation /// is typically written to an output file or another destination. This function simplifies the /// process of generating documentation from source code. -pub fn generate_doc(input_file: &str) -> Result<(), Box> { - let doc = get_doc(input_file).unwrap(); +pub fn generate_doc(input_file: &str) -> Result<(), DocError> { + let doc = get_doc(input_file)?; let tokens = Output::to_output(doc); - let filename = extract_filename(input_file).unwrap().to_string(); + let filename = extract_filename(input_file).ok_or(DocError::ExtractFilenameError)?.to_string(); - let out = AllOutput { all_output: tokens.clone(), filename }; + let out = AllOutput { all_output: tokens?.clone(), filename }; generate_module_page(out)?; @@ -44,18 +73,18 @@ pub struct Map { /// The `get_map` function reads a Noir code file specified by the `input_file` path, processes it, /// and maps the necessary information to its corresponding documentation. It returns a `Map` structure /// that provides a convenient way to access the documentation associated with various code elements. -pub fn get_map(input_file: &str) -> Map { +pub fn get_map(input_file: &str) -> Result { let mut map = HashMap::new(); - let doc = get_doc(input_file).unwrap(); + let doc = get_doc(input_file)?; - let tokens = Output::to_output(doc); + let tokens = Output::to_output(doc)?; for token in tokens.iter() { map.insert(token.information.clone(), token.doc.clone()); } - Map { map } + Ok(Map { map }) } /// Generates documentation pages based on `Noir` code @@ -81,15 +110,17 @@ enum Commands { }, } -fn main() { +fn main() -> Result<(), DocError> { let cli = Klee::parse(); match &cli.command { Commands::GenerateDoc { filename } => { - generate_doc(filename).unwrap(); + generate_doc(filename)?; } Commands::GetMap { filename } => { - println!("{:#?}", get_map(filename)); + println!("{:#?}", get_map(filename)?); } } + + Ok(()) } diff --git a/tooling/doc_generator/src/output.rs b/tooling/doc_generator/src/output.rs index 4422ee74743..685b048df44 100644 --- a/tooling/doc_generator/src/output.rs +++ b/tooling/doc_generator/src/output.rs @@ -23,11 +23,11 @@ pub(crate) enum Type { impl fmt::Display for Type { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - Type::Function => write!(f, "Function"), - Type::Module => write!(f, "Module"), - Type::Struct => write!(f, "Struct"), - Type::Trait => write!(f, "Trait"), - Type::OuterComment => write!(f, "OuterComment"), + Type::Function => writeln!(f, "Function"), + Type::Module => writeln!(f, "Module"), + Type::Struct => writeln!(f, "Struct"), + Type::Trait => writeln!(f, "Trait"), + Type::OuterComment => writeln!(f, "OuterComment"), } } } @@ -127,7 +127,7 @@ impl Output { /// The `to_output` function processes a vector of spanned tokens, typically representing source code, /// and converts them into a vector of structured output objects. Each output object includes information /// about the code element, its type, name, documentation, and additional details as applicable. - pub(crate) fn to_output(input: Vec) -> Vec { + pub(crate) fn to_output(input: Vec) -> Result, crate::DocError> { let mut res = Vec::new(); let tokens = input.into_iter().map(|x| x.into_token()).collect::>(); let mut is_first = true; @@ -219,7 +219,7 @@ impl Output { let doc = doc(&tokens, i); let content = get_module_content(&tokens, i); - Output { r#type, name, doc, information: Info::Module { content } } + Output { r#type, name, doc, information: Info::Module { content: content? } } } Token::LineComment(_, Some(DocStyle::Inner)) | Token::BlockComment(_, Some(DocStyle::Inner)) => { @@ -252,15 +252,15 @@ impl Output { res.push(out); } - res + Ok(res) } } impl fmt::Display for Output { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "Type: {:?}\n", self.r#type)?; - write!(f, "Name: {}\n", self.name)?; - write!(f, "Doc: {}\n", self.doc)?; + writeln!(f, "Type: {:?}\n", self.r#type)?; + writeln!(f, "Name: {}\n", self.name)?; + writeln!(f, "Doc: {}\n", self.doc)?; Ok(()) } } diff --git a/tooling/doc_generator/src/pages_generation.rs b/tooling/doc_generator/src/pages_generation.rs index a95dc98b9ec..206a8759e18 100644 --- a/tooling/doc_generator/src/pages_generation.rs +++ b/tooling/doc_generator/src/pages_generation.rs @@ -1,4 +1,5 @@ use std::{ + ffi::OsStr, fs::{self, File}, io::Write, path::Path, @@ -14,17 +15,20 @@ use crate::{doc, fn_signature, get_text, Code, Output, Type}; /// The `generate_code_page` function reads the content of a text file specified by the `input_file` path, /// processes the text content as code lines, and generates an HTML page that displays the code lines. /// The resulting HTML page can be used for code documentation or rendering purposes. -fn generate_code_page(input_file: &str) -> Result<(), Box> { +fn generate_code_page(input_file: &str) -> Result<(), crate::DocError> { let codelines = get_text(input_file)?; let code = Code { codelines }; - let rendered_html = code.render().unwrap(); + let rendered_html = code.render().map_err(|_| crate::DocError::RenderError)?; - let fname = format!("generated_doc/codepage_{}.html", extract_filename(input_file).unwrap()); + let fname = format!( + "generated_doc/codepage_{}.html", + extract_filename(input_file).ok_or(crate::DocError::ExtractFilenameError)? + ); - let mut file = File::create(fname)?; - file.write_all(rendered_html.as_bytes())?; + let mut file = File::create(fname).map_err(|_| crate::DocError::FileCreateError)?; + file.write_all(rendered_html.as_bytes()).map_err(|_| crate::DocError::FileEditError)?; Ok(()) } @@ -48,16 +52,16 @@ pub(crate) struct Function { /// The `generate_function_pages` function generates an HTML page for a function represented by the `func` parameter. /// The HTML page displays the function's name, documentation, and signature. This function is typically used to /// generate documentation pages for functions. -fn generate_function_pages(func: Function) -> Result<(), Box> { +fn generate_function_pages(func: Function) -> Result<(), crate::DocError> { if func.is_method { return Ok(()); } - let rendered_html = func.render().unwrap(); + let rendered_html = func.render().map_err(|_| crate::DocError::RenderError)?; let output_file_name = format!("generated_doc/{}.html", func.name); - let mut file = File::create(output_file_name)?; - file.write_all(rendered_html.as_bytes())?; + let mut file = File::create(output_file_name).map_err(|_| crate::DocError::FileCreateError)?; + file.write_all(rendered_html.as_bytes()).map_err(|_| crate::DocError::FileEditError)?; Ok(()) } @@ -191,13 +195,13 @@ impl Implementation { /// The `generate_structure_pages` function generates an HTML page for a structured code element represented by the `structure` parameter. /// The HTML page displays information about the structured code element, including its name, documentation, signature, additional documentation, /// and any associated implementations. This function is typically used to generate documentation pages for structured code elements. -fn generate_structure_pages(structure: Structure) -> Result<(), Box> { - let rendered_html = structure.render().unwrap(); +fn generate_structure_pages(structure: Structure) -> Result<(), crate::DocError> { + let rendered_html = structure.render().map_err(|_| crate::DocError::RenderError)?; let output_file_name = format!("generated_doc/{}.html", structure.name); - let mut file = File::create(output_file_name)?; - file.write_all(rendered_html.as_bytes())?; + let mut file = File::create(output_file_name).map_err(|_| crate::DocError::FileCreateError)?; + file.write_all(rendered_html.as_bytes()).map_err(|_| crate::DocError::FileEditError)?; Ok(()) } @@ -225,13 +229,13 @@ pub(crate) struct Trait { /// The HTML page displays information about the trait, including its name, documentation, signature, additional documentation, /// required methods, provided methods, and any associated implementations. This function is typically used to generate /// documentation pages for traits. -fn generate_trait_pages(r#trait: Trait) -> Result<(), Box> { - let rendered_html = r#trait.render().unwrap(); +fn generate_trait_pages(r#trait: Trait) -> Result<(), crate::DocError> { + let rendered_html = r#trait.render().map_err(|_| crate::DocError::RenderError)?; let output_file_name = format!("generated_doc/{}.html", r#trait.name); - let mut file = File::create(output_file_name)?; - file.write_all(rendered_html.as_bytes())?; + let mut file = File::create(output_file_name).map_err(|_| crate::DocError::FileCreateError)?; + file.write_all(rendered_html.as_bytes()).map_err(|_| crate::DocError::FileEditError)?; Ok(()) } @@ -263,16 +267,13 @@ pub(crate) struct SearchResults { /// The `generate_search_page` function generates an HTML page to display search results provided in the `res` parameter. /// The generated page includes a list of code outputs that match the search criteria. This function is typically used to /// create search result pages for users searching for code documentation. -fn generate_search_page( - res: SearchResults, - module_name: String, -) -> Result<(), Box> { - let rendered_html = res.render().unwrap(); +fn generate_search_page(res: SearchResults, module_name: String) -> Result<(), crate::DocError> { + let rendered_html = res.render().map_err(|_| crate::DocError::RenderError)?; let filename = format!("generated_doc/search_results_{}.html", module_name); - let mut file = File::create(filename)?; - file.write_all(rendered_html.as_bytes())?; + let mut file = File::create(filename).map_err(|_| crate::DocError::FileCreateError)?; + file.write_all(rendered_html.as_bytes()).map_err(|_| crate::DocError::FileEditError)?; Ok(()) } @@ -283,11 +284,7 @@ fn generate_search_page( /// This function is useful when you need to isolate the filename from a file path, which can be particularly helpful when generating documentation /// pages or handling file-related operations. pub(crate) fn extract_filename(filename_with_path: &str) -> Option<&str> { - let path = Path::new(filename_with_path); - match path.file_stem() { - Some(file_stem) => file_stem.to_str(), - None => None, - } + Path::new(filename_with_path).file_stem().and_then(OsStr::to_str) } /// Generates an HTML documentation page for a module, including associated code elements. @@ -295,13 +292,13 @@ pub(crate) fn extract_filename(filename_with_path: &str) -> Option<&str> { /// The `generate_module_page` function generates an HTML documentation page for a module and its associated code elements. /// This page typically includes code outputs, such as functions, structs, traits, and other code constructs. It also provides /// links to related code documentation and a search feature for easier navigation. -pub(crate) fn generate_module_page(module: AllOutput) -> Result<(), Box> { - let rendered_html = module.render().unwrap(); +pub(crate) fn generate_module_page(module: AllOutput) -> Result<(), crate::DocError> { + let rendered_html = module.render().map_err(|_| crate::DocError::RenderError)?; let fname = format!("generated_doc/{}.html", module.filename); - let mut file = File::create(fname)?; - file.write_all(rendered_html.as_bytes())?; + let mut file = File::create(fname).map_err(|_| crate::DocError::FileCreateError)?; + file.write_all(rendered_html.as_bytes()).map_err(|_| crate::DocError::FileEditError)?; let fname = format!("input_files/{}.nr", module.filename); @@ -319,7 +316,10 @@ pub(crate) fn generate_module_page(module: AllOutput) -> Result<(), Box Result<(), Box { generate_trait_pages(Trait { name: i.name.clone(), doc: i.doc.clone(), - signature: i.information.get_signature().unwrap(), - additional_doc: i.information.get_additional_doc().unwrap(), - required_methods: i.information.get_required_methods().unwrap(), - provided_methods: i.information.get_provided_methods().unwrap(), - implementations: i.information.get_implementations().unwrap(), + signature: i + .information + .get_signature() + .ok_or(crate::DocError::GetInfoError)?, + additional_doc: i + .information + .get_additional_doc() + .ok_or(crate::DocError::GetInfoError)?, + required_methods: i + .information + .get_required_methods() + .ok_or(crate::DocError::GetInfoError)?, + provided_methods: i + .information + .get_provided_methods() + .ok_or(crate::DocError::GetInfoError)?, + implementations: i + .information + .get_implementations() + .ok_or(crate::DocError::GetInfoError)?, })?; } Type::Module => { generate_module_page(AllOutput { - all_output: i.information.get_content().unwrap(), + all_output: i.information.get_content().ok_or(crate::DocError::GetInfoError)?, filename: i.name.clone(), })?; } diff --git a/tooling/doc_generator/src/tests.rs b/tooling/doc_generator/src/tests.rs index c745bebad93..229b97601ed 100644 --- a/tooling/doc_generator/src/tests.rs +++ b/tooling/doc_generator/src/tests.rs @@ -39,7 +39,7 @@ mod tests { let result = Map { map }; - assert_eq!(get_map("input_files/function_example.nr"), result); + assert_eq!(get_map("input_files/function_example.nr").unwrap(), result); } #[test] @@ -56,6 +56,6 @@ mod tests { let result = Map { map }; - assert_eq!(get_map("input_files/struct_example.nr"), result); + assert_eq!(get_map("input_files/struct_example.nr").unwrap(), result); } } From a083e5014becf5612d7a5eaabbc53c261e8faddf Mon Sep 17 00:00:00 2001 From: f01dab1e Date: Fri, 1 Dec 2023 08:12:37 +0000 Subject: [PATCH 13/19] chore: update `Cargo.lock` --- Cargo.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.lock b/Cargo.lock index 48c2d89c8db..742c35c7214 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1475,6 +1475,7 @@ dependencies = [ "askama", "clap 3.2.25", "noirc_frontend", + "thiserror", ] [[package]] From 0d78c1fbf6089da2dbe2aafec8c4d5a509a977ce Mon Sep 17 00:00:00 2001 From: f01dab1e Date: Fri, 1 Dec 2023 08:19:48 +0000 Subject: [PATCH 14/19] chore: fix typo :) --- compiler/fm/src/file_map.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/fm/src/file_map.rs b/compiler/fm/src/file_map.rs index 982e4e9f070..199723a28b5 100644 --- a/compiler/fm/src/file_map.rs +++ b/compiler/fm/src/file_map.rs @@ -5,7 +5,7 @@ use std::{ops::Range, path::PathBuf}; // XXX: File and FileMap serve as opaque types, so that the rest of the library does not need to import the dependency // or worry about when we change the dep -#[derive(Clone, Dpebug)] +#[derive(Clone, Debug)] pub struct PathString(PathBuf); impl std::fmt::Display for PathString { From 551748fb702bbb1db6454ee9925272be0cedf197 Mon Sep 17 00:00:00 2001 From: f01dab1e Date: Fri, 1 Dec 2023 08:57:14 +0000 Subject: [PATCH 15/19] chore: make clippy happy --- tooling/doc_generator/src/getters.rs | 52 +++++++++---------- tooling/doc_generator/src/pages_generation.rs | 8 +-- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/tooling/doc_generator/src/getters.rs b/tooling/doc_generator/src/getters.rs index e7a1ccb634b..03688636c5d 100644 --- a/tooling/doc_generator/src/getters.rs +++ b/tooling/doc_generator/src/getters.rs @@ -122,7 +122,7 @@ pub(crate) fn fn_signature(tokens: &[Token], index: usize) -> String { } _ => { res.push_str(&tokens[i].to_string()); - res.push_str(" "); + res.push(' '); i += 1; } }; @@ -144,16 +144,16 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { loop { match &tokens[i] { Token::LeftBrace => { - res.push_str("{"); - res.push_str("\n"); + res.push('{'); + res.push('\n'); loop { match tokens[i] { Token::RightBrace => { if is_private { res.push_str("/* private fields */"); } - res.push_str("\n"); - res.push_str("}"); + res.push('\n'); + res.push('}'); break; } Token::Keyword(Keyword::Pub) => { @@ -162,7 +162,7 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { match tokens[i] { Token::Comma => { if tokens[i + 1] == Token::RightBrace { - res.push_str(","); + res.push(','); } else { res.push_str(",\n"); } @@ -174,7 +174,7 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { } _ => { res.push_str(&tokens[i].to_string()); - res.push_str(" "); + res.push(' '); i += 1; } } @@ -189,7 +189,7 @@ pub(crate) fn struct_signature(tokens: &[Token], index: usize) -> String { } _ => { res.push_str(&tokens[i].to_string()); - res.push_str(" "); + res.push(' '); i += 1; } }; @@ -214,12 +214,12 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec { - sign.push_str("{"); - sign.push_str("\n"); + sign.push('{'); + sign.push('\n'); loop { match tokens[i + 1] { Token::RightBrace => { - sign.push_str("}"); + sign.push('}'); break; } Token::Keyword(Keyword::Fn) => { @@ -229,8 +229,8 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec (String, Vec { @@ -254,7 +254,7 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec (String, Vec { sign.push_str(&tokens[i + 1].to_string()); - sign.push_str(" "); + sign.push(' '); i += 1; } } @@ -287,7 +287,7 @@ pub(crate) fn trait_info(tokens: &[Token], index: usize) -> (String, Vec { sign.push_str(&tokens[i + 1].to_string()); - sign.push_str(" "); + sign.push(' '); i += 1; } }; @@ -307,7 +307,7 @@ pub(crate) fn additional_doc(tokens: &[Token], index: usize) -> String { if index == 0 { return "".to_string(); } - let res = match &tokens[index - 1] { + match &tokens[index - 1] { Token::LineComment(dc, Some(DocStyle::Inner)) | Token::BlockComment(dc, Some(DocStyle::Inner)) => { let mut res = dc.to_string(); @@ -352,8 +352,7 @@ pub(crate) fn additional_doc(tokens: &[Token], index: usize) -> String { } res } - }; - res + } } /// Extracts documentation comments for a code element from a list of tokens. @@ -366,7 +365,7 @@ pub(crate) fn doc(tokens: &[Token], index: usize) -> String { if index == 0 { return String::new(); } - let res = match &tokens[index - 1] { + match &tokens[index - 1] { Token::LineComment(dc, _) | Token::BlockComment(dc, _) => { let mut res = dc.to_string(); let mut doc_end = true; @@ -410,8 +409,7 @@ pub(crate) fn doc(tokens: &[Token], index: usize) -> String { } res } - }; - res + } } /// Extracts an outer documentation comment associated with a code element from a list of tokens. @@ -495,11 +493,9 @@ pub(crate) fn get_text(input_file: &str) -> Result, crate::DocErro let file = File::open(input_file).map_err(|_| crate::DocError::FileEditError)?; let reader = BufReader::new(file); let mut code = Vec::new(); - let mut i = 0; - for line in reader.lines() { - i += 1; - code.push(CodeLine { number: i, text: line.map_err(|_| crate::DocError::FileEditError)? }); + for (line, number) in reader.lines().zip(0u32..) { + code.push(CodeLine { number, text: line.map_err(|_| crate::DocError::FileEditError)? }); } Ok(code) diff --git a/tooling/doc_generator/src/pages_generation.rs b/tooling/doc_generator/src/pages_generation.rs index 206a8759e18..51b4481731f 100644 --- a/tooling/doc_generator/src/pages_generation.rs +++ b/tooling/doc_generator/src/pages_generation.rs @@ -118,7 +118,7 @@ impl Implementation { right_impl = true; } signature.push_str(&tokens[i].to_string()); - signature.push_str(" "); + signature.push(' '); i += 1; } Token::LeftBrace => { @@ -138,8 +138,8 @@ impl Implementation { continue; } }; - let doc = doc(&tokens, i); - let sign = fn_signature(&tokens, i); + let doc = doc(tokens, i); + let sign = fn_signature(tokens, i); functions.push(Function { name, @@ -175,7 +175,7 @@ impl Implementation { } _ => { signature.push_str(&tokens[i].to_string()); - signature.push_str(" "); + signature.push(' '); i += 1; } } From 19fe80497c5631a6a52ec216a8b4e4d909504b1e Mon Sep 17 00:00:00 2001 From: f01dab1e Date: Fri, 1 Dec 2023 09:01:15 +0000 Subject: [PATCH 16/19] chore: fix Cargo.toml :) --- Cargo.lock | 87 +++----------------------------- tooling/doc_generator/Cargo.toml | 6 ++- 2 files changed, 12 insertions(+), 81 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8e3ed3ece22..9fc00771a49 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -452,17 +452,6 @@ dependencies = [ "waitpid-any", ] -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - [[package]] name = "autocfg" version = "1.1.0" @@ -854,23 +843,6 @@ dependencies = [ "half", ] -[[package]] -name = "clap" -version = "3.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" -dependencies = [ - "atty", - "bitflags 1.3.2", - "clap_derive 3.2.25", - "clap_lex 0.2.4", - "indexmap 1.9.3", - "once_cell", - "strsim", - "termcolor", - "textwrap 0.16.0", -] - [[package]] name = "clap" version = "4.4.7" @@ -878,7 +850,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" dependencies = [ "clap_builder", - "clap_derive 4.4.7", + "clap_derive", ] [[package]] @@ -889,23 +861,10 @@ checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" dependencies = [ "anstream", "anstyle", - "clap_lex 0.6.0", + "clap_lex", "strsim", ] -[[package]] -name = "clap_derive" -version = "3.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" -dependencies = [ - "heck 0.4.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "clap_derive" version = "4.4.7" @@ -918,15 +877,6 @@ dependencies = [ "syn 2.0.39", ] -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - [[package]] name = "clap_lex" version = "0.6.0" @@ -1211,7 +1161,7 @@ dependencies = [ "anes", "cast", "ciborium", - "clap 4.4.7", + "clap", "criterion-plot", "is-terminal", "itertools 0.10.5", @@ -1481,7 +1431,7 @@ name = "doc-generator" version = "0.1.0" dependencies = [ "askama", - "clap 3.2.25", + "clap", "noirc_frontend", "thiserror", ] @@ -2033,15 +1983,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - [[package]] name = "hermit-abi" version = "0.3.3" @@ -2303,7 +2244,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi", "rustix", "windows-sys 0.48.0", ] @@ -2607,7 +2548,7 @@ dependencies = [ "barretenberg_blackbox_solver", "bb_abstraction_leaks", "build-data", - "clap 4.4.7", + "clap", "color-eyre", "const_format", "criterion", @@ -2806,7 +2747,7 @@ dependencies = [ "acvm", "aztec_macros", "build-data", - "clap 4.4.7", + "clap", "fm", "fxhash", "iter-extended", @@ -2942,7 +2883,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi", "libc", ] @@ -2967,12 +2908,6 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" -[[package]] -name = "os_str_bytes" -version = "6.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" - [[package]] name = "owo-colors" version = "3.5.0" @@ -4413,12 +4348,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - [[package]] name = "thiserror" version = "1.0.50" diff --git a/tooling/doc_generator/Cargo.toml b/tooling/doc_generator/Cargo.toml index 600e21413d9..5c0f2cfad1d 100644 --- a/tooling/doc_generator/Cargo.toml +++ b/tooling/doc_generator/Cargo.toml @@ -1,12 +1,14 @@ [package] name = "doc-generator" version = "0.1.0" -edition = "2021" +authors.workspace = true +edition.workspace = true +license.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] askama = "0.12" thiserror = "1.0.21" -clap = { version = "3.2.0", features = ["derive", "cargo"] } +clap.workspace = true noirc_frontend.workspace = true From 338c10e61590112fcbdb1f7c50ca5b6f3c2eb00c Mon Sep 17 00:00:00 2001 From: f01dab1e Date: Fri, 1 Dec 2023 09:03:55 +0000 Subject: [PATCH 17/19] chore: add lints :) --- tooling/doc_generator/src/main.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tooling/doc_generator/src/main.rs b/tooling/doc_generator/src/main.rs index 6da501fad37..8ea961db772 100644 --- a/tooling/doc_generator/src/main.rs +++ b/tooling/doc_generator/src/main.rs @@ -1,3 +1,8 @@ +#![forbid(unsafe_code)] +#![warn(unused_crate_dependencies, unused_extern_crates)] +#![warn(unreachable_pub)] +#![warn(clippy::semicolon_if_nothing_returned)] + mod getters; mod output; mod pages_generation; From 169b35017593091539188efea091993b61469388 Mon Sep 17 00:00:00 2001 From: f01dab1e Date: Fri, 1 Dec 2023 09:05:15 +0000 Subject: [PATCH 18/19] chore: thiserror.workspace = true --- tooling/doc_generator/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tooling/doc_generator/Cargo.toml b/tooling/doc_generator/Cargo.toml index 5c0f2cfad1d..3a30ae94e57 100644 --- a/tooling/doc_generator/Cargo.toml +++ b/tooling/doc_generator/Cargo.toml @@ -9,6 +9,6 @@ license.workspace = true [dependencies] askama = "0.12" -thiserror = "1.0.21" +thiserror.workspace = true clap.workspace = true noirc_frontend.workspace = true From cf0c976285357f5c80d305cdfce8b3a0e4efee5f Mon Sep 17 00:00:00 2001 From: f01dab1e Date: Fri, 1 Dec 2023 09:22:39 +0000 Subject: [PATCH 19/19] chore: fix tests --- .gitignore | 3 ++- tooling/doc_generator/generated_doc/.gitkeep | 0 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 tooling/doc_generator/generated_doc/.gitkeep diff --git a/.gitignore b/.gitignore index 2176c885b53..4664f300111 100644 --- a/.gitignore +++ b/.gitignore @@ -56,7 +56,8 @@ tooling/noirc_abi_wasm/web tooling/noir_js/lib # Doc-generator -tooling/doc_generator/generated_doc +tooling/doc_generator/generated_doc/* +!tooling/doc_generator/generated_doc/.gitkeep **/package.tgz packages diff --git a/tooling/doc_generator/generated_doc/.gitkeep b/tooling/doc_generator/generated_doc/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d

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 N(&7qY6(UAI{s$8HQAq#* literal 0 HcmV?d00001 diff --git a/tooling/doc_generator/Screenshots/Trait_page.png b/tooling/doc_generator/Screenshots/Trait_page.png new file mode 100644 index 0000000000000000000000000000000000000000..2c8f352af6fce8cf871916f258173af31755cfce GIT binary patch literal 188979 zcmeFYRajh0&@N1jBxrDl1P$&GJh%mS4-h;sA?TnHf=dVt1PBmhf-^w}m;r*j%b