From f2f48e329827b1750a39cced3cd4a27183e944af Mon Sep 17 00:00:00 2001 From: Kiko Fernandez-Reyes Date: Fri, 15 Sep 2023 16:55:47 +0200 Subject: [PATCH] compiler: implementation of EEP-59 Implementation of EEP-59 - Documentation Attributes - Documentation attributes are added to the binary beam file, following format of [EEP-48](https://www.erlang.org/eeps/eep-0048), via `+beam_docs` compiler flag - Warnings related to documentation attributes are dealt with in the `beam_docs.erl` instead of adding them to `erl_lint.erl` *Example 1* ```erlang -module(warn_missing_doc). -export([test/0, test/1, test/2]). -export_type([test/0, test/1]). -type test() :: ok. -type test(N) :: N. -callback test() -> ok. -include("warn_missing_doc.hrl"). test() -> ok. test(N) -> N. ``` Using the compiler flag `warn_missing_doc` will raise a warning when doc. attributes are missing in exported functions, types, and callbacks. *Example 2* ```erlang -module(doc_with_file). -export([main/1]). -moduledoc {file, "README"}. -doc {file, "FUN"}. -spec main(Var) -> foo(Var). main(X) -> X. ``` `moduledoc`s and `doc`s may refer to external files to be embedded. *Example 3 - Warnings and Types* ```erlang -export([uses_public/0]). -export_type([public/0]). -doc false. -type hidden_type() :: integer(). -type intermediate() :: hidden_type(). -type public() :: intermediate(). -spec uses_public() -> public(). uses_public() -> ok. ``` Compiler warns about exported functions whose specs refer to hidden types. In the example above, the `hidden_type()` is set as `hidden` either via `-doc false` or `-doc hidden` and `public() :> intermediate() :> hidden_type()`. When documentation attributes mark a type as hidden, they won't be part of the documentation. Thus, the warning that the `hidden_type()` is not part of the documentation, yet used in an exported function. --- bootstrap/lib/compiler/ebin/beam_doc.beam | Bin 0 -> 17580 bytes bootstrap/lib/compiler/ebin/compile.beam | Bin 39052 -> 39736 bytes .../lib/kernel/ebin/erl_erts_errors.beam | Bin 23652 -> 23660 bytes bootstrap/lib/kernel/ebin/group.beam | Bin 16816 -> 17964 bytes bootstrap/lib/kernel/ebin/prim_tty.beam | Bin 22544 -> 22564 bytes bootstrap/lib/stdlib/ebin/argparse.beam | Bin 22908 -> 22908 bytes bootstrap/lib/stdlib/ebin/beam_lib.beam | Bin 19240 -> 19424 bytes bootstrap/lib/stdlib/ebin/c.beam | Bin 18820 -> 19204 bytes bootstrap/lib/stdlib/ebin/edlin.beam | Bin 16156 -> 16248 bytes bootstrap/lib/stdlib/ebin/edlin_context.beam | Bin 11864 -> 11884 bytes bootstrap/lib/stdlib/ebin/edlin_expand.beam | Bin 26256 -> 26296 bytes bootstrap/lib/stdlib/ebin/edlin_key.beam | Bin 3940 -> 3972 bytes bootstrap/lib/stdlib/ebin/epp.beam | Bin 32072 -> 33824 bytes bootstrap/lib/stdlib/ebin/erl_lint.beam | Bin 91388 -> 92028 bytes bootstrap/lib/stdlib/ebin/erl_parse.beam | Bin 179332 -> 179996 bytes erts/preloaded/src/Makefile | 2 +- lib/compiler/doc/src/compile.xml | 29 + lib/compiler/src/Makefile | 1 + lib/compiler/src/beam_doc.erl | 1073 +++++++++++++++++ lib/compiler/src/compile.erl | 81 +- lib/compiler/src/compiler.app.src | 3 +- lib/compiler/test/Makefile | 1 + lib/compiler/test/beam_doc_SUITE.erl | 603 +++++++++ lib/compiler/test/beam_doc_SUITE_data/FUN | 3 + lib/compiler/test/beam_doc_SUITE_data/README | 3 + lib/compiler/test/beam_doc_SUITE_data/TYPES | 3 + .../all_string_formats.erl | 20 + .../test/beam_doc_SUITE_data/callback.erl | 69 ++ .../test/beam_doc_SUITE_data/deprecated.erl | 46 + .../beam_doc_SUITE_data/doc_with_file.erl | 25 + .../doc_with_file_error.erl | 24 + .../test/beam_doc_SUITE_data/docformat.erl | 18 + .../docmodule_with_doc_attributes.erl | 36 + .../test/beam_doc_SUITE_data/equiv.erl | 10 + .../test/beam_doc_SUITE_data/export_all.erl | 31 + .../test/beam_doc_SUITE_data/folder/FILE | 3 + .../folder/doc_with_file.hrl | 1 + .../beam_doc_SUITE_data/hide_moduledoc.erl | 15 + .../beam_doc_SUITE_data/hide_moduledoc2.erl | 25 + .../beam_doc_SUITE_data/private_types.erl | 65 + .../singleton_docformat.erl | 21 + .../beam_doc_SUITE_data/singleton_meta.erl | 17 + .../test/beam_doc_SUITE_data/singletondoc.erl | 19 + .../singletonmoduledoc.erl | 7 + .../test/beam_doc_SUITE_data/skip_doc.erl | 19 + .../test/beam_doc_SUITE_data/slogan.erl | 73 ++ .../test/beam_doc_SUITE_data/spec.erl | 24 + .../beam_doc_SUITE_data/spec_switch_order.erl | 54 + .../beam_doc_SUITE_data/types_and_opaques.erl | 147 +++ .../beam_doc_SUITE_data/types_and_opaques.hrl | 2 + .../beam_doc_SUITE_data/user_defined_type.erl | 3 + .../beam_doc_SUITE_data/user_defined_type.hrl | 2 + .../beam_doc_SUITE_data/warn_missing_doc.erl | 14 + .../beam_doc_SUITE_data/warn_missing_doc.hrl | 2 + lib/compiler/test/compile_SUITE.erl | 27 +- .../test/compile_SUITE_data/simple-basic1.mk | 2 +- .../test/compile_SUITE_data/simple-basic2.mk | 2 +- .../test/compile_SUITE_data/simple-missing.mk | 2 +- .../test/compile_SUITE_data/simple-phony.mk | 4 +- .../test/compile_SUITE_data/simple-target1.mk | 2 +- .../test/compile_SUITE_data/simple-target2.mk | 2 +- .../test/compile_SUITE_data/simple.erl | 4 + .../test/compile_SUITE_data/unicode-0.md | 1 + .../priv/bin/validate_links.escript | 13 +- lib/stdlib/doc/src/beam_lib.xml | 12 +- lib/stdlib/src/beam_lib.erl | 24 +- lib/stdlib/src/epp.erl | 78 +- lib/stdlib/src/erl_lint.erl | 87 +- lib/stdlib/src/erl_parse.yrl | 41 + lib/stdlib/src/stdlib.app.src | 2 +- lib/stdlib/test/beam_lib_SUITE.erl | 2 +- lib/stdlib/test/epp_SUITE.erl | 53 +- lib/stdlib/test/erl_lint_SUITE.erl | 104 ++ make/otp.mk.in | 2 +- system/doc/reference_manual/Makefile | 3 + system/doc/reference_manual/documentation.md | 414 +++++++ system/doc/reference_manual/modules.xml | 66 +- system/doc/reference_manual/part.xml | 1 + system/doc/reference_manual/xmlfiles.mk | 1 + 79 files changed, 3460 insertions(+), 83 deletions(-) create mode 100644 bootstrap/lib/compiler/ebin/beam_doc.beam create mode 100644 lib/compiler/src/beam_doc.erl create mode 100644 lib/compiler/test/beam_doc_SUITE.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/FUN create mode 100644 lib/compiler/test/beam_doc_SUITE_data/README create mode 100644 lib/compiler/test/beam_doc_SUITE_data/TYPES create mode 100644 lib/compiler/test/beam_doc_SUITE_data/all_string_formats.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/callback.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/deprecated.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/doc_with_file.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/doc_with_file_error.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/docformat.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/docmodule_with_doc_attributes.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/equiv.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/export_all.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/folder/FILE create mode 100644 lib/compiler/test/beam_doc_SUITE_data/folder/doc_with_file.hrl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/hide_moduledoc.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/hide_moduledoc2.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/private_types.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/singleton_docformat.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/singleton_meta.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/singletondoc.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/singletonmoduledoc.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/skip_doc.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/slogan.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/spec.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/spec_switch_order.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/types_and_opaques.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/types_and_opaques.hrl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/user_defined_type.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/user_defined_type.hrl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/warn_missing_doc.erl create mode 100644 lib/compiler/test/beam_doc_SUITE_data/warn_missing_doc.hrl create mode 100644 lib/compiler/test/compile_SUITE_data/unicode-0.md create mode 100644 system/doc/reference_manual/documentation.md diff --git a/bootstrap/lib/compiler/ebin/beam_doc.beam b/bootstrap/lib/compiler/ebin/beam_doc.beam new file mode 100644 index 0000000000000000000000000000000000000000..8eed6ff73e3979b79586ee106abfee32cf50ad39 GIT binary patch literal 17580 zcmbV!3w#vS_5V)phFpe>4w;4UW@Hvw3?qZPND_z)yNLl5j0TNbHO~ct$!6Kz@bDQ0 z1>g8U9RwByUyTnc&|06=M_a8{>Z?y%EPX%mXRZCU{r&uZ&z+e~NUi<<|M1UlYD-fvN6R%saWI^uS%0QrWPaqID#M_ds-OU|6?ZNKW&Qx(%XEv8D zUf$Ey(G>(RTS6brYi14aO?4!fcczjZ!;+b<*3^pPOtLqdEb6(mG`TL9X>HFn_oQ># z;jOt`rn9X#mn>=T=}vccB}3+WXOiA`OfU0U=m0R;-U{sUK==58 zZZlC5q>o|XrMorFK}375vnN&VqbQI^qq5cr_q&)l%%w&4KwvVM%k(D4`ct!AJu6yM z&C4@A-Obr_vfbjoAcFLDSXVN&BDb<6lU$R`WRs))X|0(R*?~zT+IncKgm@UJD*>Aw zz3sW;<*i-W}4zSnkE@f%7bC;4tdb^XUTq|+H@U1wxy0>#pkd~+IZce9zAUadh zo9b-u=}3m!SGLlYgN)`}Pjg#msx`AdnCeL-hq*gecI*IBs%gFHY%-HOb}g4|;OPd6 zuIA2MvU^xhx^;DLGW2=FSvHx2nx?bG-O0>~@KjH(c{$0VFs$&- z8kU8YrdB}wo!y!*NB4DecQV&H%7+zp6OzmhbH5c7emT@TNFT@f!=XGqnT}!ZV>n(B zYpv-5xuE?~eSIUF{ z3Xw~$3tpOBpXCB!$BN|eRB~-|7JHgx=#9uEv7Gx|^^|}N0q=XWvIl6*=0tNHb}P z@GOEOe**ayVbY{Y3=GwW`}hryW5hP@Zj-+l!Ajy_qKI) zwl^Vf0KUXDIyOu=Rf?gqpSI16i>ulmP;h5M2_ zv%Y4Nw}hLTNJ{Ye#A4fJVbslQJ98_?(7-OJV>2Y#L7ZjWc?A<001Yp6ecdGta(hn- zMvjn{lb3fUyE?@D<4H5zudUf^Py3+n$#rmO#kt-zY#QOII|#*IO)O-4+lXWiEfzRn zN!>kgp#+@#`P>U#qW20JBX!7pvR^b>_?PysRxmU13y`+Al^}qU6IFc662>;FyLEjV zOb*NW(F$7$=alM@nq>rxRIV2~w7x6_JsyQM}pJc?DY-s3gih8BA8MFi$LvU43XX;;u(aH?ml@FZ{p||#S<;G$cL7-rz zrx*4PADYR+Qzsd~tY&7-2+#ME_c)$RV$k;~=1{b>-ptu%S9|ypYvwG|GD{%H4#bmx z9ZDP=Gt@9YN3b(bFvw) z3bOXhdLSZ0LIWx>sW8q>28M{QjAnPh1Swx|JyMC61xzo@^z?2Z9~^>YqIpafd(7Ke z<`=!S%yETPC~ZH6^pHs>ftj&ETW6W&W@ie1A=!cF@*d<7ls`c>)&H-;^wC)6)Gyet zfl&$Mn}NW|Z{e(>qS3ztfq-;Bp65xbqZXA-u_e9KvTY-1YayG3?WkrO%+Z5-(hg}h zGwd*XtXvO;9V=)lx7tjzgUqpmx)M_7ScFzr)&78198I_^_h*uoLBhxuuOjgD-Sq*zyzxD zb&O9sC(impRkK6YvqL(la<%|?vJpDb;o20`jQ5jxAss z%lB&bOL0v%;+hq#=r!JU4hB_otE#JYLB?vfN?_95if3Q!K_+b}QB{b}ImC5cmv*TZ z(WlEQa}ILV(xtu5;i59ROqC8+DJrWz!1Oo^XmO?*bF~BIEwc8B9Qvg^>OJXD)d8dW zfMKaER@?}%xS?usLpSP-A|a+arfGJ)&YYu5bz3^@4%St>Ft|=D(%eB7bGS;Qj(*W7 z8>2?jD6Uo2TSEEB+y4%a~VSXJU>d1WMRNGUjF!8qgNKtG>=p`j98j|cg9 z4XObCF;;W6Kf@UT76 za!Z~RO>8SRm|d<%naU^Y2kzjLH0(~AX%Zi+T9(+V$%eznELAOuk5jk!NEj(ilx6U+ zUozy0Y?!W$miYK%Ntt9R6C^$%ubePI%EZqlMgJmFCJrWLtRQ95za?dYN6KVdBQ|sp zzaP&N96pwwQye}HqCEkkHS)?dAzG+1iPcc1mAAaDoG4FGrpksAmUuX?M2Pai!f7F_ zQ?a4o_;HD!SOFw*7>n8RRD$i5_%wIvh{MOzlG7bN0ZX2UB~QvL=AhlgPMX-sX-b70 zQ7R-}QEFRoFTs#)0Aq}(a`;3T_Dt*<+)rqZGD90soBlL(hWtYj)M^rZ170^Va6I{n zVzr@(SsF|}SOFm1l*9EBwMDg6xB_jDQEq80XoodB#)>WFR9oUR&@Hn;uj!J1vcpdR z*%i>*nN`ZktQt)iC%y;+o!6wP%E_d1vn&PbAxu+)&(U=9DLQjMjbWf);@Si+Vk#S?mCJYgl~HYzd5VulixP307cpMr6T1qm&IaT<-&^u`J$)+nD$ zFLoyqF+9+qPBuJ|@M0{gfqq&6GaC~_2R5|SH5QTP>Kb#2ieWNoGK|)Vr+{S( z%$%B6W(zNC1frHQ8-~L*ZM!l@Q!N{QCjkQzIt#CZj^S$voU6`5M8zCiu-CBD(~MHxa-+{qWnPoffca5YrOb2fdmagUuB}u{ zyqer(g)&c*V-BBMqNYpKzWa)Unkr`0C^ZtFOPlRFQ&z`{SRD+)u5W=#omisV|2lr2 z9R%Gqc8G1(;fkgqs%^97Dy>*ob_FDU8hi&CiH%*FsmzzFmH85%U#jZ12IY!i^d9o= z8VIOn2#c6@2Xx1tqbx8y12&jzH@hUhU^dt$W}$@$wFt6&dWpKl!vJ825bT1e;;uR- z9DWjnHxH27DrK=Nkj3S;t(@MV)JeP!tQr-{Vnc?Kx)yC~Q5yjiQCrs8Fk3lO;-~wg z;886Dc*v_lwHF!`D57(jvKT>UnzBf)QR?MMO1;GEOLg0h5|!9@kXeE7R!s&5yg|(l zMWLLm7}!DCLJ+{@X%b&l4b(aXDxwu%gy~>0l?|e5nn%@Qm&G$2J_9VCW=s6cymCR5 zJP(vR%0r1gjZjhz8ggEuG~MF*hy>D;m~GVB+A^DU>{OODC7>@&jVjh`#G2V44Kmz8XH_UohCJVv=Z7TT z5RdWEkn!0xO$*j2=Sci)Xsg7}!J9E~3M3!1MBka{&96ocgA@TDaZY^dKzrf+M_D3atp~Fvsq~qAKFXfes3zm4XAt%V| zZU=0qa&Z$Q11x7V@Kvszqg=#%b&tY)^2#MaH#i7(f?%hQm8r0yi)Je=EUz>VjU9ay zJ1%xN`;z^TTeHJs6e3z2KAY%kb@-{Es}6Lv<&~8Mx>gFhCAVoFk&U!xb%n|640$Og!@aCCs?l^sN2;gN;lL7ZB!DbYW&M4u9MKYqti$J*=m+!4 zdXi*3#7831tkt#^Yh*CNg2Iz*d6_HRwS&WpEmCQ|&LwL-N%=B|F92-~pzZR!(&y1e zELA91A>KfXt`u5y1+?f2iC>Xdt{JL3e6(B*nO^Cly{Zams?n^xaxD#wYkX9+Lg|aj z)d&lHz*eJN4WD_n#IGh7?C|&%#a4r1D9}*&3lbrjC&S6%kXE7}8nl=8VTRSJg!RC% z1b#oJQc6lMLCQ4_PtZ1B>+o87Zg6-VxNHQM8}rI0!KJX0XqB=lT8(DKqXDE4n*_n| zPvCo#p!7OWdY#0tE43QzL=gVY*23{9Ik3~o!8^QO_;`kh6b~O1sZ0=l;d*~tSjZM4`7zTU9;b#!lVPq-#o>;ja)8e&U4clRyAwxFu zD2lUZmgt8OUU8}mIebZpdbCox2`9S{Vy;FfNxoDJFfg9R2+&z27FR{Oh@gk5Rxpgb zV@c35ub22ub}cJw0Q)z)tlr}A2C#Yon7_3&jf~a~hQb4p%He011o%js#oR~OeT3Xc z5D%PVC(}6*O4hM#S#731UB9J%SG^hw*QZ0l`ZTLg%QFE?%T@GW{oeX?5&n5$;5LV! zgXO=ZN_>mIN65=sc)47~$Doa^-wR@IcX%U)U4#v}Bd^>^$)2xqB8wYCS=^ltUxw2# zzsuq0V(`UaY3tl3)}q{t-O-hMuse54{BD(>V8I;5vpRz@{}_cMATZqHy&HGzyYcky zUhmz6W8Y1rcaFo)!-|)Hylr{KaSxcfd%zrnO==qA4Eb2s8{X&e^D(a(^R|Pe5ORi{ z#!h92NG5SegiG52Gu}bTK>&_+2Sd2`85gED4t`$ZJACI0#16jzYEq(dEgn2fzPJQQ zt}j}6V*4l#z4d8fy*s^dB;(xZ2I0KJF9bzxplDZK$qP;jMFr&5<;Y|2*N{@k^Re#z zJ}urR*!2hDAHO7$Q5LLH9%u@safD$w+CY6TLezRRgmhCA`6r)3YNLn59)K{Nm%Hxr z0TGdQJN#l$(hf@Y?o|p;cc#X zcYTg{^}X)a_LC+)=J0l4SqUtU=anahVCitN?EO3}2VE>r5SAw$o&=UoVA-2jzT(j< z@)#j^4To8Yf5qX;Y4lSLUxCr9FnV8JdCGJCA;aM-M-=mNXq5qnyB`jBf7B|qMY?Q| zLxqjQr{eh51r9r*HDl;Z5=4O~s2Y?ZYA8R1;Axm0j%~J7c$u+-^or6$p;Y^^(!!|3 z4>)`k2JZhAhH!Y4~y99R$mUY{w*S|Qr*SjmtxUz$Do|xqWqe}yMSsnP(AHe zZjOS=?t-T8#q<R{XldGgz?~D?a0{ z=xwv5TPfd_jVN{)1oyaR7BrtiB$r zTM~Z(xJe6MbogbU;&M=dT;)YUg$^n(fra8Y*SM=*{yD2&;ja1(TGg|hZ^T0+?kgc~ zWIU7uU4=oA?bSksLxaT;s;z0BY_=<-qwL-5-wF2=lQk@{q4x>-9n19Q`PT*iE1*tn!n{ zU0JLwNO7DzR~UW`C0P_Ig$olIA4sI!;uVq{bza4~Cji1YtLVu&JalGU>)UU`g9aPad9 zru_fg{#L){@S7F_@H%PHcN~5*sJ<4Gexpix*FDF-OXv9SHYjgO{7r-2YJKcx4_x&Bb63ahR+~?@A|WFt`~>@C{ohzAx596971jFEs4K{W6%2% zKUAfB4}R)S*+Y)~pQ~oCLcR(hlyep<4V|y1F+q+2W zQBtLFj59v6F_*e&MBS}}sWVGK-MemH^q#|S1M3^W`upzr;60#v&!9R1{O5a7!ZWWa zsw(eMq2~vd@_mVaU)^idX(1j(q29ezbot$=zU8=5K9(MRvAlM89AL6|zQHuaIjw0&M9ey|7-hj79^2#rWcO_uy zNP9+VRER<%yn?FyM!r$`wZwmo8L+%hv;lwBfPyE+zj}jrVlkH?qD3C_&MmQ;>#O9G9m9Qh=@i(X!A1%jGXom7<`DW!$ z@-50AQ7rwld?nhgXt$xAjJ8zyt-J-#R^`tU|81pmG_fGTjJ$G`S@P{w%27~x)TL4| zkJJ@61DdM!^Rh&FV7u}Mt<-KnVTdAl0%d4DxKsIElZIjl6$5@R@!z53Eb-rq?=tL27_A3zv?56`mD7+c(>D;j$FUELmQI&xTe8kot1|6E*jPZ{|^6mt~ z0|yg>#qg|A{vz=|4dDf(!GRrR@|}2rsxmV$l&s;1#Q$t3=qdocqjQu`5`}Lcd3#8; zOxnM@l#k`D%701xzbdigyBSt3Jlw@UaTovib6!aNFW}8x<`dV-{|c2`2;KkG;X9z5 zcZ0*fK?R@&7L5E;c#=<}I6{9aEVU1ZI`4F}%#L>0S`Ic|i}RGjce=;WJRRt2HMqif zj)!XF9f8=MFkRlnpxe7d`W04daaoDn`0t@=G)uJu@eX*54jq9+)P0$qqqAIx!|xX+ zjqS=|i3jlILx=CCB~UuXnXyBh8FPDK@;SQ$L-vs8h=+7kB>r2w&#g!xo1-)i_XtSB z3u#;}k_KcgwVN$mcn+j-wTNm+;~f4VtO8I2Nzn1w%yfnxPWz@P3b;60vd+D;GkM#Ri2tQ3Zitdy1n5nq;`+P51YK?iE6j6XjiX4Y~wt{ugc1{b^IVUEz6Wkr|@UMW(`@o%QnIoe$ zW|7td^Kn(TS@Ez zDIy|3!mEpsD<`C1b8Ey@366?NFzh|yo)+jH(cL>7m!4YKC`Cp&{AqBx9h))QFPncI z+2yDTvz%q}<`^oTlg85tFH$Z($2j~M)WsuX9sVrl?y#iDxb5b6ZKpY2gdcfAv=mn& zIIt5r&$)M445Y~JsV*{J)SE2So7`KGxY2-GSxXGUclh(r{*&N9!|;wFc*hRNtHPYn z#M1Ie_)J)y6%NUHx9){Itruwg=Zul_9fdJ3{@XDgB0UJ*IY^@_%!y(tdl@T3g(WgU zD9c1BDx2FBZZT)V{B(1wJjt9SMJB;N80CHPE^~@}zj=cEfT?H9$x>vpU4Mwxm|-cR z+x3Ut-U)U+;v>PP*!4(aMAw*Oo(x?Kdsi{Fp$_6to~R*ABPiD*7JLJ{QBh;gkRnsD z+DT%y=~yj-)uv_46Q#(B?rIfMWSYAgdJ%Uu^rm~Op?i|MTE&pnCJb8bC0b32%y9V2 z*thMbxolhUGJo$#9wrV>=EaIp9?JrrMN1>?(X zq=RE%yR}9TLrSxkH4JlIP z@Hara~J`A}oK$)o!0gV{+Hx5#&&4gTKCZtFlsyPyCyamHEE6rMlpC?g? zyDn6Z*z52^xNC+!o}4!m%zA)K(Ba<$U?u@{0jNZ80sY>|On{phet%$~YaoM;;SJpd zSKtY_g}HB2a>EGHgi@BL$e|$po+5%@Im{HltccWtAX0`phra_p9s?hz=gp;*31VB2 z$Y|Q0M7eH6x0`3e=ba&ZUQuQJqj( zrCATU8T{9~V93IS9>PSN|2Mj3o$A;hFH$Y>TKvd9%f6bn>{bl!pqjpzzU){D4d{dl!~!Ns+~%2^Cx^at84V#Agml-b79xS>o{b7vs%RlrAD? zIsE$&z>^R_gJSuIFoa}}kA6N5YGNm_gFgUur&O3{Q|X9~rMkm^2!<}ATyZGzh{`y( z0z3*l*&dx9*=LJgK>Z|gj>CV1#lM2Z8*zxY;o*_VFqH1SpGW-oUnVbe_)jq9DOHM` zn>WwHF=`*QlfhJ@OwJR-=Xs1bIROkjfCzfNUB;HGJSIghaABByAyEym&Sy)JFM$(` z{TkpGRhpN0%672^pWBHYxfrH%krcTkW;PQk z%>x@mDQ%<$+k|z#j&)iq%{JU&!xUKXUzEcQ#BDLNov`3qS=7>H68ER@=RKa zBrDA2nmn^KkbX2Feqqsw9JA4GXJ<4BAG2H>gd!{48PB#zk(Cu@r~Kwd85!e0;b?K?rcVlTlD!f=RmxY6!=|AO%O<(orJ+AuUv4t|6<4xz1$` z4iN5$Jt6peq~lb16xnOg4i{LW-mxr&{90ZZORtNOGeT7rKfM^JL&mT&M;(&f*;;qA z);av=`=Q+H9ljduy$k_dR%KoV_O4XBmci5JJ}7A9>*d65@pEz-FkYqwEhHH+uf* zCj3$mxLyOUn`fA}!6>WD+aRpl#C;%&6u2Tc%-ewAF7sA-pLvTExrM9>fe=`3t;E0w z81w|=<$ZYJt}9;N<}Ih7&+X>MIYB4`S?iPJ4fEBd--N38uWt9g-F0{FzO!z_og3=18?trn+4ee|+UxL(K>vr;{d_vz*f{(*RO^e}fetAC z4&;4jX~04S?hIYn?p@A7z~4}%$ks~p9?wJHJ@ETy_@=v!x82hXf|CCuXrU>0Lm#$E zk$Yn1y(GGOeSPu#spIqk^_vjVHuw!3!Ol>{lDNP9Ena*VYi_SG?~@`sT*ZD1fSonw z4k?2BRI<230PLzU^DNMq%PgZGvoGpS<5{#9-6}MO7WAIfKMqYo<7mgD6?y%UcoKXx zS~;2zpYFkF?nz#MHlC+?{W*BzZ-2#H>d*E1Hl7R62+!$g^=O2j@SKH4@Uzj*@%rcD zd7js|@oYk)@dQ5~jpot#3(@Ew!TmnLThM4c^;^*he+Sx`XauJ|e)nJC>r$_84pYUu%^Vi*kK8?50ZbA#9(f2#h{4qPd{%$Uz1=01T&U89Zs855LBPe+y5d+lR05;LqVn>-+FG(Zzge8-WJFU-#g*<2h^){521LGoB@b z;NSG%H{eO~kvuwI@!)-U4j%-6*@It(r#uKwd=WqNegv9N=S%2>EB4?Ip-*&H<2e@1r}HTfelDKl2EoUpPja9&sqc?J0bPO{XcN$U_=)HeoOF01 znh&3aF2Tv4PeSwI^Ux)DE!t!>A09`S;9o-1(R_Fvx&&`SBN}}8LUak|-jL52yVg_~mHCqYtP3AoxbKX=pwiwk+VJN0CAB z@1Re5cqg9I(S-h-*_p$52|lgpjdk0%p0nhPS1ff&Q&UsOcboo!ue0|K^mYa9vM(y~=b5A_@ z?WeU1A6yx3dh+|%^@kVK@7NvvDDlVNt$t$PM{j(&?Ye2(S3k4j;fr58uA=qvh9|8l z6Hfe*{rmfSPwTFk^{36VPO9CxyXe#NjEna7{^rdY`b6&-Z{Dyt?+jqS6{?_k~zoDaVixU6)?PtDr;ROAP4V9N3pV;uhn4YTb z&+h;ELvI{7{`)UK@tcocdGe&ktv@8I{(1Q2-G4so>HTA#y?WDmJ35OpOFwvP#+0Xv zt|^^8>ZJ0f@oVqgeI$P2l+)CYemY|MhsED$d2q!|*9CV>X}1#Xi`I;I>*`1TTKnFl ztNYLUX!`Kd#lIN+*?AvN+qC_sug@O#S<~ZZy?4i(Pyh1him7*fu=L1?t&go`q3(0` zzyJO{k3WCo{yQGu^v0{P*S{6&n)!>XE`DU}JyY^8FzK{+9>r!X!5{eJVQwHTl2#V2 zRq^Ne_`7!eHDVI~PXPSy0>q28viq0C^ar}DR$=G@{53Bg(+cz0nruo8O{sy)K3?RE zYuDR`#6R|#`!CQJkW^{XXMw=~ E0b4>%=Kufz literal 0 HcmV?d00001 diff --git a/bootstrap/lib/compiler/ebin/compile.beam b/bootstrap/lib/compiler/ebin/compile.beam index 8de3b85fc2bb79075828ae2172e85f3b5fe2fa30..986ffa3955e6bd2a31e22f6682a7c9da55a5a3eb 100644 GIT binary patch delta 20795 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 Vl<&Iin~|oAXRDcp2I?;v^nY=3Us(VE delta 20254 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 Z&b&RTX}K#K&Q@qJXYrgbgU1&4`#-dV!T|sP diff --git a/bootstrap/lib/kernel/ebin/erl_erts_errors.beam b/bootstrap/lib/kernel/ebin/erl_erts_errors.beam index e7adb3aa8158f621bf72a3a651a1ecc2f06510ac..ad041d5d4ce751fa26fcd3f19a6ff8db29ebe4d1 100644 GIT binary patch delta 132 zcmaE|gYnG{Mh-XsAVUU*n3RniulX4xH-F*3FDc+4;L6Oz?8?NdbqKq_u zK8t|vdxX?xR;~FOGK?Og^$ZM*Aq+r*fq^L>LIXKK@yQ2*L|8zK%{PJ;atQFgzOnscShd^0B_MEJOBUy delta 111 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 delta 7162 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 diff --git a/bootstrap/lib/kernel/ebin/prim_tty.beam b/bootstrap/lib/kernel/ebin/prim_tty.beam index 711b856a134be80f363f331f31d28ea31059c4c7..61a8a2f3ec2d2f37ad1ec7808186b74b80fd2c7b 100644 GIT binary patch delta 2535 zcmZuyeRLF872mgSHawS~=Ku*bc0E=K$a;`d z6ez2XD;s6`@MIp|x5mqD8G=!GdCKDHJV*s?b(B{YUD3vrA4q zr+>`Mo!`Ch-QT+(?-mb|(m}$O4z2EVI6fYDnk^S#qi{;D-|(6Bcdp-%`}CdL*XFjY z-Mndgu6&cLRv>%J%V!_*#%^ZKvMFu|n+a;Mu~|9`5_ZP)gw2R-u^oc0eKPNom;!A< zjVSPmU|?~RoDqsLVQ*UO{=7?JA)_vwcj+vY2^TW7NUw9Tri_eYfyUhD@PpO@2~V-&=%uD42>}hYw?}ZJOv&~iCTLQ!*dBXXCR?a1 zv@I$O!{xQ1+0NnnzNytw77!J;#2OV-77mFwvH+z%<)AYqOBkt=plCZ#DW#}HQ-UH- zTTEeix63ZYeL^Daa@_r{ERMkwkuCM#;Y(7~K}|s(mn4fl34vx!{jPwf2n&2C(<2}7 zNgj)Rj~koRV;a;H^XPCNY-C@n12Ax*QF+kvPlgy z7dB;ThH=qTus%Ak?FU?Gj)ct|s&i%-1O7vV4)g8P)SRuL<-u7BYqr?a@a<@bJOjs~ zDk;OIXmU=7M>RVo=iOHn7KKHzM(-qNY|;oOg>xHM@GOTwZ;8ULn4dfg2VyDm99)Xc z3;xKamDRImHq4og$+q|BIc%{XLqu)$|Ku8#kt&rJDpY<78`Tgw3=gW?NffTCjoueO z!tW9EJ4}8C_qKdt*-@^SbSdRgWFF9x>{G;tP?Ye*Kc80WTPtDax-Mlr|mP#$xna;RT{8TWacGJ@R+ zrXgd*F_(hHehr)Bf%z}vl3u=K0<$oInlU>Tzk$8+1?0EzVti5e@21-i>%T-*_f_n# z$pb!pqBJ?absfgrV!sz8Z7EVs@56YBIZWLjKyUMqDHv$`RL$|cYcCRgs;vWwzTT#g zKf=|v7-s2eC(vccq(ZOe%g`exk?|_v6=+VPuamGvo9Fuz=EEl`(g4L`$zpvf z>8!>63}4p_@zgY9cvWjq|57Dq>_bzV+^f~dMp9`B&z;7~wAf!E&_0Zz{cL-jyarZ# zU+wF5p?G*_orZJmE#wVwcl47pFx1gdd)8J8T=^z^zN49(gC{z&5u_ENSrSvR*&UhmFiodC1$2Jiw(@W*0okC{f@v#Zn4-nom8+|y z>*NBQ)Cb8$SkT#W+dDQ5gZEg3cT=^;{=s2>-Vx;YPy9KY;x=eNN3PlYi^CSXWK)S0 zGU)-@EXliuQNlYYQM@JZT8G8`%EE#9k5Mc<6Em3978CVGlgj3juql2G z^lq;|nu!!~5Kx}RXvW}jWkA5~-F;*?e4{%;_Q28Z_BFe;CE^|}B|fJ06SY4jvpTz% zRrgA~4T+jU#8W}$RFEZz$Q5L61xX`PUqPe_GGM877%K}_^mNW?wP)?kEGF9{?%|#e z9C0u7ghW2#a`x_qu_LOidm)Lq~Zo~6uirHGFo1`Y`5V3f9HlxBT{~EMLQwq zp=oGY>L#P0uKpsD-n+U;jG8ObU8p%*v2u!4YeyA7Q^jZDm-Dmn ha(3hqr&M!jPTQ@|-?sDQw*PJl&OLg%OfqxH{{W`ne3}3N delta 2788 zcmb7GdvIJ;8Q-(#ZgYA~+MAqBmZV$uad)#f+1zBeyUnAL_T*+$!%W&_(sdRe*g)4A z9h{*yJ4$D|W`n7O_reLKS7!*~3KnV!Y${ZxwkRry8l+mJ3baVUf&zlr8HbMFIUCYA z{^cKM@3+7Eo$vg<=eeahRGdR(^YCcg;kbf4LWUGtx8n;}?Ye45?(@6Gx96_i{-rOD z=XhFqp}fget)QFBLn{y0M-$j4Q&k%AF?EN|K0(5?Dn|T>yu#c%3sIZwRbu96^Dd19 zxZyKD70BR1CRD^$`WTJYoTi8=w72FABBwv*B0-u_iWHGEHn}11@)JE-tLI%YqG$9% z1{bkV$xsjrI8yVfu%r}iGA*p@{E#oGhHBw86>9uN-<4=D@AkjhkOhjx|Dnj&2h25s z&5WB(>1>9w5a```k!?QU4FxfrfDt)o6E06F)lx}Juy7YECp{79MLPd?puIhunJH#U zl0XQ7O35bs<+e<=P}wLoDilNIOmL+$al@=xi-}kDYh}E;K z)I4P2dkPq^+z#+kXE?+tW;$hxds>Ux;lc#eBdV$J{(z#$~@je(LA4wY(j_m@rc#= z19@<%2=-GVZ_*K)JSO36EX%UMC&{KNd>$9DO^)y$qqXseA2CTUGWk)3$&dN0;i<+7 zD`C*sW0NNU823eh&J5J(`3x;0rh-Q$e9+^cDNPq3W=AEnp8&IFeoad&I>z_4eC5*P zBFtJ$v)q0Pxlu~g<5zD1QG?(-$y-~!tA8ppfgSXK8?c}8Pqv!g8%5sROqY%j`Eb@m zvL0qlCxy-Yo>ptcQ+d}hDDktc>yW`4qXzrAs8iuT1U6mq^%ufdmIO$tK;pmb7)5pr zOH#P1iUd!h~gXCMk5&94pM6a;mO2Y$_NIH*DC`KW-*wxU?xHd0_D`S#*`Reh&7@&__^31`YTVw zTf*n08%fc=Au%Tw+xJZYiy)?f`CEK4-a!5)nA_yD6Kex_@Zs%WHH#AWMGyedhty;_>Tz6Jn2hIEDF*0gx@}79s+2nok z1nmb0RWC9i(1)c^4?QA<2Ae!J2r3?%JTHMuY_c$zLPn!aPD!B2CNE224Fp39-qkkw zr?9)$CLcKK)I0eViEhOC9f`H@`*7kqxGs$3Hu&9>-0ho;AtTCAKSK$oZ(~k<#h7U# zqs=B4VDBV%ukQxUE$gp=-y`d9Lo?wc8%!9+DY7h80^r#B@p75Lt;ji#kSor20X)-3%^7pGuMhB8xfOxlK5ya{J= zML1O)8shKw40h_`J$wu#&8;P=4izsA`If6M8O_PBl~8%thVxF34whgM6C}I5dDDBSQQSW|jhcCJ|5Q6PhAFGnnYzC`+V>C?SNTHf zb&P!c>|jzWI0{ZjT+R9mPOR=w3%vF67%G%MbNSs${eK^xlr+NSs;%t^o#maw1L!rr zXLu)al;0Y@9ZhsN9F7TC2vz~sBrFW89@h1+oQv|;m&v=A$y3YZZ!F3Yc;2)Ozj+xh z>L37b@_}M!yQ4%#Rk4*X6u#0N$L21@xS1<>_z;oR6j5iV(`z frEhg=UoIS{!?jPJf9YQjoIEs`zPDVTS&jY!-0!TF diff --git a/bootstrap/lib/stdlib/ebin/argparse.beam b/bootstrap/lib/stdlib/ebin/argparse.beam index 60e604be6560a539ff4fbb26f3e97ed7d67f5e7d..a6358a5d0372e80428c1b9b2c4b4e12a3ea33485 100644 GIT binary patch delta 257 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 delta 8166 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 diff --git a/bootstrap/lib/stdlib/ebin/c.beam b/bootstrap/lib/stdlib/ebin/c.beam index 18faff81bf846faa29ced864d35f0f96741ed224..c685420862b4e1b35197306f2272049b306b50dc 100644 GIT binary patch literal 19204 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 K>{JaX%JhHX*sM$d literal 18820 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 SXw0T2D*cg3cBlpvZu&n@R$R^i diff --git a/bootstrap/lib/stdlib/ebin/edlin.beam b/bootstrap/lib/stdlib/ebin/edlin.beam index 9bf13c7c95ffa745346060476799e2e6bfbd1064..dbbfcbab1b8839f9442635692a28c5c63236a593 100644 GIT binary patch literal 16248 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 Avj6}9 delta 8695 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 lPY>b$x88>44^Fmk$3z|zAJYq{|j`5Qt|)* diff --git a/bootstrap/lib/stdlib/ebin/edlin_expand.beam b/bootstrap/lib/stdlib/ebin/edlin_expand.beam index 4a191c7d98fc47f728bfdc6fd9a815746e8cfac1..2dc2526324ab8318b322a613f906885c819c0daa 100644 GIT binary patch literal 26296 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

V!ba%AbGOIBD1W-+%buv?ISL z^+k#v*mq1~#rG5M|K)rA{vIEEyXC+7gY34YJ@l*+<+-bNO}c#jWwTH3Kldd0`v+I` zerVIDk38G|#r^69pML#WuQPtzbn^QPe%dr;z~3J}W%(!f2*+ly{bziC=6kz;ZC`ut zdCPCQ;+V>#8Ww)^e9nVt9LBadDF+~q&DEziBW<+hu?cv9*G6o;&s1?Y_ f(SKecr?ao0S5dUUT&rF9Yjn=H{qi00>lXRAhEScrL7G{xwFtD%#Y=Fol*^mWXh$I?Ml8`JU5R#bPaL8c< z6g)viaRd#57lMe2Cmx7+Up(ITeLm_V&x6Z0>5pB!{Jx`rGMAuBUlT~}LQ9$nH{Szn!Iy;5T}(Ym^fdC_=z zEM6IpcH!SvIdyJjT`VfqMdwvkEiG?ojyE>PGa8#38tZCf@faVosIsm(Dp_!=8tUWG zCGjo<%PyxiMXMT`s?!!WR5#Z}+1%#(s(5WfeJTgwtgDR0ot5#1g=x{Iy2|=_DcRXh zbSW1XRyI20(WZszP0>ZsrdTw6PHla4ZT&n64do3@GyQ_DxX^$t*ef?YGdU#xxJ3jUS40hFxvN64V>ecV`Us%nbRDPcDJMw zU)l&RG|!tCjS(do{5#$hjdJ()mYgCgpftd-KlA` zv#PSLE*+dA7GyLuMw==LK^F|c(3)thHYP5rY;rYJSC^mN+z^k((lIwe$RO_WSXE_x zO2dK-Dq~12O1NUta*})6!sx;|(WXqIi6l$xPOFR7&x_XxiZDrpk_c+*+`5L!xG*xk z7HT&y+9aGHRyV}ODb4lH;)bTUI4e4rBZ@-S!m#p13t6rM{tu4a-Jntt7~mR#jzFZG35WtTEC-qNSanfYI8j* z6Z+dWYd)g{D{AYajg|2l=Uf!hxk*@DE#^+hWyH4f>e{AsYN@N8lLoE8r>m|33RO

{KI)v`P+Q;s7=6mQ`5?Z)62_aG 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

Q!SQFQq>WP@zvlW8cx5z? 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 H-5mc9VqM)H diff --git a/bootstrap/lib/stdlib/ebin/edlin_key.beam b/bootstrap/lib/stdlib/ebin/edlin_key.beam index 7986438a9ba60c46363582f594b9f87909048ff3..85a0ab5e8549afb2b75d2e51e9ae2f965b425a56 100644 GIT binary patch delta 1436 zcmYk23pA8z7{|YvZ^}2HXqb^}GlOwA?$<~kHRBRvFpbNiD;ecB#;s%!(Yi#_#W33v zU6j?htlc9TI+eB&~VVopO_6ZS;`0OZ;t#gwlVX2TTEY?undx}IgQ zo@ccxK*T`aVu*xQh4ldp{?NNVgNM;s9_#V2V7iEor%+xJ3$1`vt+lGbFOTP%DTRQr zh3EiY8~*=fQ5l}JZJJm}_!`mqHWH!)AXEksOJsmV^frj_^}3DU4uy&#buSPUP2dw4 zhUl+iP!v&CdMt_(it*Rp4BgF9Kt_5Z2i@&Za3}^SD>?Q`FOtBPLL;B_up+@wuyMw2ROX|<|x-|8O8mbttos*--=QA&#u;-7z6<|-BBy|{1PTGW7EPRUE zd0pzFd(kb~W1{ij=Y73!Tzy0MIgfGS^G*X3w^@x%d7b8)l5(C0G6ED72Nl=-ks_G_ zrsg}cBX8)FgSebm@ReO_yiFsd71!TYRLw++(zn|?>D1O$FFNHp(P)*{PmWCS5VM-f z_r)v%PrZyhwYKd|6TwG;y}!hX73zF6)x%K`OBk=IC*F=B?J*xIQgc`PY)uy)7?#U8 z{W)X38HvMp%;1CiwI7(Kk1ybAExVU1!b4Am&G{tz^)+b}tMd%J|15=dDjF@Nead$D z##VB8KKGulanVVcn!|!^d%oYF=Xr-KDPx4juIKY1Q^W=MH=r zKOSd zgm;!-yUf2mbj36xc*oV)tL%LwpYm|}{V1y!L)(*5zmFYp4C#<9F%wdHD(Ct%?LAz3 zmv6rNuGK$gqJL4g;l=g*kB4)j^5(EZ{Xq^J7POC3%H~rSTfGgMwa&jRs}(?wqe6F_ fr>ZDT*@Liz*aSg?XR;eEXWmsggVhxMrd;(O7jPC@ delta 1404 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 diff --git a/bootstrap/lib/stdlib/ebin/erl_parse.beam b/bootstrap/lib/stdlib/ebin/erl_parse.beam index 919a12d0a17cd84d4b3e9fdc745bea125f2672ae..c01208ec9b18560f8cb58cf654aa5b81028a4b45 100644 GIT binary patch literal 179996 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 SRTOfcY%b(B|FR{AQvVO+2+;Zf literal 179332 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

9uzz*1e|4~b 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 diff --git a/erts/preloaded/src/Makefile b/erts/preloaded/src/Makefile index 1994aa1302b3..4d742b06dc63 100644 --- a/erts/preloaded/src/Makefile +++ b/erts/preloaded/src/Makefile @@ -84,7 +84,7 @@ KERNEL_SRC=$(ERL_TOP)/lib/kernel/src KERNEL_INCLUDE=$(ERL_TOP)/lib/kernel/include STDLIB_INCLUDE=$(ERL_TOP)/lib/stdlib/include -ERL_COMPILE_FLAGS += +debug_info -I$(KERNEL_SRC) -I$(KERNEL_INCLUDE) +ERL_COMPILE_FLAGS += +debug_info +no_docs -I$(KERNEL_SRC) -I$(KERNEL_INCLUDE) ifeq ($(ERL_DETERMINISTIC),yes) ERL_COMPILE_FLAGS += deterministic diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml index d7c5e34dd23e..b601baf07d89 100644 --- a/lib/compiler/doc/src/compile.xml +++ b/lib/compiler/doc/src/compile.xml @@ -146,6 +146,16 @@ exception at runtime).

+ no_docs + +

The compiler by default extracts documentation from + -doc attributes + and places them in the Docs chunk according to EEP-48. +

+

This option switches off the placement of -doc attributes + in the Docs chunk

. +
+ binary

The compiler returns the object code in a @@ -875,6 +885,25 @@ module.beam: module.erl \ warnings.

+ warn_missing_doc + +

By default, warnings are not emitted when -doc + attribute for an exported function is not given. Use this + option to turn on this kind of warning.

+
+ + nowarn_hidden_doc | {nowarn_hidden_doc,NAs} + + +

By default, warnings are emitted when -doc false + attribute is set on a callback or referenced type. You can set + nowarn_hidden_doc to suppress all those warnings, + or {nowarn_hidden_doc, NAs} to suppress specific + callbacks or types. NAs is a tuple {Name, Arity} + or a list of such tuples. +

+
+ warn_missing_spec

By default, warnings are not emitted when a specification diff --git a/lib/compiler/src/Makefile b/lib/compiler/src/Makefile index a33d14f2d5c6..297f6b1253a5 100644 --- a/lib/compiler/src/Makefile +++ b/lib/compiler/src/Makefile @@ -56,6 +56,7 @@ MODULES = \ beam_dict \ beam_digraph \ beam_disasm \ + beam_doc \ beam_flatten \ beam_jump \ beam_listing \ diff --git a/lib/compiler/src/beam_doc.erl b/lib/compiler/src/beam_doc.erl new file mode 100644 index 000000000000..cf2726bbe55d --- /dev/null +++ b/lib/compiler/src/beam_doc.erl @@ -0,0 +1,1073 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2023-2028. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% %CopyrightEnd% +%% +%% Purpose : Generate documentation as per EEP-48 +%% +%% Pass to generate EEP-48 format for beam files. +%% +%% Example: +%% +%% 1> compile:file(test). +%% + +-module(beam_doc). + +-feature(maybe_expr, enable). + +-export([main/4, format_error/1]). + +-import(lists, [foldl/3, all/2, map/2, filter/2, reverse/1, join/2, filtermap/2, + uniq/2, member/2, flatten/1]). + +-include_lib("kernel/include/eep48.hrl"). + +-moduledoc false. + +-define(DEFAULT_MODULE_DOC_LOC, 1). +-define(DEFAULT_FORMAT, <<"text/markdown">>). + + +-record(docs, {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% + %% PREPROCESSOR FIELDS + %% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% + %% These fields are used in a first pass to preprocess the AST. + %% The fields are considered the source of truth. + %% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + cwd :: file:filename(), % Cwd + filename :: file:filename(), + curr_filename :: file:filename(), + opts :: [opt()], + + module :: module(), + deprecated = #{} :: map(), + + docformat = ?DEFAULT_FORMAT :: binary(), + moduledoc = {?DEFAULT_MODULE_DOC_LOC, none} :: {integer() | erl_anno:anno(), none | map() | hidden}, + moduledoc_meta = none :: none | #{ otp_doc_vsn => tuple() }, + + %% tracks exported functions from multiple `-export([...])` + exported_functions = sets:new() :: sets:set({FunName :: atom(), Arity :: non_neg_integer()}), + + %% tracks exported type from multiple `-export_type([...])` + exported_types = sets:new() :: sets:set({TypeName :: atom(), Arity :: non_neg_integer()}), + + %% tracks type_defs to point to their creation annotation. used for throwing warnings + %% about type definitions that are unreachable + type_defs = #{} :: #{{TypeName :: atom(), Arity :: non_neg_integer()} := erl_anno:anno()}, + + %% helper field to track hidden types + hidden_types = sets:new() :: sets:set({Name :: atom(), Arity :: non_neg_integer()}), + + %% user defined types that need to be shown in the documentation. these are types that are not + %% exported but that the documentation needs to show because exported functions referred to them. + user_defined_types = sets:new() :: sets:set({TypeName :: atom(), Arity :: non_neg_integer()}), + + %% used to report warnings of types in exported functions where the types + %% may have been set to hidden with a documentation attribute. + types_from_exported_funs = #{} :: #{{TypeName :: atom(), Arity :: non_neg_integer()} := [erl_anno:anno()]}, + + %% tracks the reachable type graph, i.e., type dependencies + type_dependency = digraph:new() :: digraph:graph(), + + %% track any records found so that we can track + records = #{} :: #{ atom() => term() }, + + % keeps track of `-compile(export_all)` + export_all = false :: boolean(), + + %% slogans: used to create slogans from it. + slogans = #{} :: #{{FunName :: atom(), Arity :: non_neg_integer()} + => {FunName :: atom(), + ListOfVars :: [atom()], + Arity :: non_neg_integer()}}, + + %% populates all function / types, callbacks. it is updated on an ongoing basis + %% since a doc attribute `doc ...` is not known in a first pass to be attached + %% to a function / type / callback. + docs = #{} :: #{{Attribute :: function | type | opaque | callback, + FunName :: atom(), + Arity :: non_neg_integer()} + => + {Status :: none | {hidden, erl_anno:anno()} | set, + Documentation :: none | {DocText :: unicode:chardata(), Anno :: erl_anno:anno()}, + Meta :: map()}}, + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% + %% DOCUMENTATION TRACKING + %% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% + %% Documentation attributes of the form `-doc ...` are not known + %% to be attached to the callback / function / type until reading + %% the next line. The following fields keep track of this state. + %% As soon as this state is known to be attached to a type / callback/ function, + %% this state should be saved in the `docs` field, which is a mapping + %% of {function(), arity()} => {...} e.g. contains hidden fields, lines, + %% documentation text, etc. + %% + %% one cannot rely on the fields below to keep track of documentation, + %% as Erlang allows pretty unstructure code. + %% + %% e.g., + %% + %% -doc false. + %% -spec foo() -> ok. + %% + %% -spec bar() -> ok. + %% + %% -doc #{author => "X"}. + %% -doc foo() -> ok. + %% + %% thus, after reading a terminal AST node (spec, type, fun declaration, opaque, callback), + %% the intermediate state saveed in the fields below needs to be + %% saved in the `docs` field. + + hidden_status = none :: none | hidden, + + % Function/type/callback local doc. either none of some string was added + %% Stateful since the documentation is a two-step process. + %% First the documentation is entered, and the next terminal item (callback, fun, or type) + %% determines to which element the documentation gets attached to. + %% + %% When getting to a terminal item, the documentation and its status gets attached + %% to a terminal item in the global map `docs`. + doc = none :: none + | {DocText :: unicode:chardata(), Anno :: erl_anno:anno()} , + + %% track if the doc was never added (none), marked hidden (-doc hidden) + %% or entered (-doc "..."). If entered, doc_status = set, and doc = "...". + %% this field is needed because one we do the following: + %% + %% -doc hidden. + %% -doc "This is a hidden function". + %% + %% Alternatively, one can merge `doc` and `doc_status` as: + %% + %% doc = none | {hidden, "" | none} | "". + %% + %% The order in which `-doc hidden.` and `-doc "documentation here"` is written + %% is not defined, so one cannot assume that the following order: + %% + %% -doc "This is a hidden function". + %% -doc hidden. + %% + %% Because of this, we use two fields to keep track of documentation. + doc_status = none :: none | {hidden, erl_anno:anno()} | set, + + % Function/type/callback local meta. + %% exported => boolean(), keeps track of types that are private but used in public functions + %% thus, they must be considered as exported for documentation purposes. + %% only useful when processing types. thus, it must be remove from functions and callbacks. + %% Stateful, need to be fixed as docs. + meta = #{exported => false} :: map(), + + %% on analysing the AST, and upon finding a spec of a exported + %% function, the types from the spec are added to the field + %% below. if the function to which the spec belongs to is hidden, + %% we purge types from this field. if the function to which the + %% specs belong to are not hidden, they are added to + %% user_defined_types. Essentially, `last_read_user_types` is a + %% queue that accumulates types until they can be promoted to + %% `user_defined_types` or purged (removed). + %% + %% RATIONALE / DESIGN + %% + %% this field keeps track of these types until we reach the + %% function definition, which means that we already know if the + %% function sets `-doc false.`. upon having this information, we + %% can discard the user defined types when the function uses + %% `-doc false.` (hidden), since that means that the function + %% should not be displayed in the docs. if the function is not + %% hidden, we add the user defined types to the field + %% `user_defined_types` as these can be (non-)exported types. if + %% the types are exported, the docs will show the type + %% definition. if the types are not exported, the type definition + %% will be shown as not exported. + last_read_user_types = #{}, + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% + %% RESULT + %% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + ast_fns = [] :: list(), + ast_types = [] :: list(), + ast_callbacks = [] :: list(), + warnings = [] :: warnings() + }). + +-type internal_docs() :: #docs{}. +-type opt() :: warn_missing_doc | nowarn_hidden_doc | {nowarn_hidden_doc, {atom(), arity()}}. +-type kfa() :: {Kind :: function | type | callback, Name :: atom(), Arity :: arity()}. +-type warnings() :: [{file:filename(), + [{erl_anno:location(), beam_doc, warning()}]}]. +-type warning() :: {missing_doc, kfa()} | missing_moduledoc | + {hidden_type_used_in_exported_fun | hidden_callback, {Name :: atom(), arity()}}. + + +-doc " +Transforms an Erlang abstract syntax form into EEP-48 documentation format. +". +-spec main(file:filename(), file:filename(), [erl_parse:abstract_form()], [opt()]) -> + {ok, #docs_v1{}, warnings()}. +main(Dirname, Filename, AST, CmdLineOpts) -> + Opts = extract_opts(AST, CmdLineOpts), + State0 = new_state(Dirname, Filename, Opts), + State1 = preprocessing(AST, State0), + Docs = extract_documentation(AST, State1), + {ModuleDocAnno, ModuleDoc} = Docs#docs.moduledoc, + DocV1 = #docs_v1{}, + Result = DocV1#docs_v1{ format = Docs#docs.docformat, + anno = ModuleDocAnno, + metadata = Docs#docs.moduledoc_meta, + module_doc = ModuleDoc, + docs = process_docs(Docs) }, + {ok, Result, Docs#docs.warnings }. + +extract_opts(AST, CmdLineOpts) -> + CompileOpts = lists:flatten([C || {attribute,_,compile,C} <- AST]), + CompileOpts ++ CmdLineOpts. + +-spec format_error(warning()) -> io_lib:chars(). +format_error({hidden_type_used_in_exported_fun, {Type, Arity}}) -> + io_lib:format("hidden type '~p/~p' used in exported function", + [Type, Arity]); +format_error({hidden_callback, {Name, Arity}}) -> + io_lib:format("hidden callback '~p/~p' used", [Name, Arity]); +format_error({missing_doc, {Kind, Name, Arity}}) -> + io_lib:format("missing -doc for ~w ~tw/~w", [Kind, Name, Arity]); +format_error(missing_moduledoc) -> + io_lib:format("missing -moduledoc", []). + +process_docs(#docs{ast_callbacks = AstCallbacks, ast_fns = AstFns, ast_types = AstTypes}) -> + AstTypes ++ AstCallbacks ++ AstFns. + + +preprocessing(AST, State) -> + PreprocessingFuns = fun (AST0, State0) -> + Funs = [% Order matters + fun extract_deprecated/2, + fun extract_exported_types0/2, % done + fun extract_slogan_from_spec0/2,%done + fun track_documentation/2, %must be before upsert_documentation_from_terminal_item/2 + fun upsert_documentation_from_terminal_item/2, + fun extract_docformat0/2, %done + fun extract_moduledoc0/2, %done + fun extract_module_meta/2, %done + fun extract_exported_funs/2, %done + fun extract_file/2, %done + fun extract_record/2, + fun extract_hidden_types0/2, %done + fun extract_type_defs0/2, %done + fun extract_type_dependencies/2], + foldl(fun (F, State1) -> F(AST0, State1) end, State0, Funs) + end, + foldl(PreprocessingFuns, State, AST). + +extract_deprecated({attribute, Anno, deprecated, {F, A}}, State) -> + extract_deprecated({attribute, Anno, deprecated, {F, A, undefined}}, State); +extract_deprecated({attribute, _, deprecated, {F, A, Reason}}, State) -> + Deprecations = (State#docs.deprecated)#{ {function, F, A} => Reason }, + State#docs{ deprecated = Deprecations }; +extract_deprecated({attribute, Anno, deprecated_type, {F, A}}, State) -> + extract_deprecated({attribute, Anno, deprecated_type, {F, A, undefined}}, State); +extract_deprecated({attribute, _, deprecated_type, {F, A, Reason}}, State) -> + Deprecations = (State#docs.deprecated)#{ {type, F, A} => Reason }, + State#docs{ deprecated = Deprecations }; +extract_deprecated(_, State) -> + State. + +extract_exported_types0({attribute,_ANNO,export_type,ExportedTypes}, State) -> + update_export_types(State, ExportedTypes); +extract_exported_types0({attribute,_ANNO,module, Module}, State) -> + State#docs{ module = Module }; +extract_exported_types0({attribute,_ANNO,compile, export_all}, State) -> + update_export_all(State, true); +extract_exported_types0(_AST, State) -> + State. + +extract_slogan_from_spec0({attribute, Anno, Tag, Form}, State) when Tag =:= spec; Tag =:= callback -> + maybe + {Name, Arity, Args} = extract_args_from_spec(Form), + true ?= is_list(Args), + + Vars = foldl(fun (_, false) -> false; + ({var, _, Var}, Vars) -> [Var | Vars]; + ({ann_type, _, [{var, _, Var} | _]}, Vars) -> [Var | Vars]; + (_, _) -> false + end, [], Args), + + true ?= is_list(Vars), + Arity ?= length(Vars), + update_slogan0(State, Anno, {Name, reverse(Vars), Arity}) + else + _ -> + State + end; +extract_slogan_from_spec0(_, State) -> + State. + +%% +%% extract arguments for the slogan from the spec. +%% does not accept multi-clause callbacks / specs due to the ambiguity +%% of which spec clause to choose. +%% +extract_args_from_spec({{Name, Arity}, Types}) -> + case Types of + [{type, _, 'fun', [{type, _, product, Args}, _Return]}] -> + {Name, Arity, Args}; + [{type, _, bounded_fun, [Args, _Constraints]}] -> + extract_args_from_spec({{Name, Arity}, [Args]}); + _ -> + {Name, Arity, false} + end; +extract_args_from_spec({{_Mod, Name, Arity}, Types}) -> + extract_args_from_spec({{Name, Arity}, Types}). + +update_slogan0(#docs{slogans = Slogans}=State, _Anno, {FunName, Vars, Arity}=Slogan) + when is_atom(FunName) andalso is_list(Vars) andalso is_number(Arity) -> + State#docs{slogans = Slogans#{{FunName, Arity} => Slogan}}. + + +%% Documentation tracking is a two-step (stateful phase). +%% First phase (this one) saves documentation attributes to fields +%% until reaching a terminal element where the docs are gathered globally. +track_documentation({attribute, _Anno, doc, Meta0}, State) when is_map(Meta0) -> + Meta1 = case Meta0 of + #{ equiv := {call,_,_Equiv,_Args}=Equiv} -> + Meta0#{ equiv := unicode:characters_to_binary(erl_pp:expr(Equiv)) }; + #{ equiv := {Func,Arity}} -> + Meta0#{ equiv := unicode:characters_to_binary(io_lib:format("~p/~p",[Func,Arity])) }; + _ -> + Meta0 + end, + State1 = update_meta(State, Meta1), + update_doc(State1, none); +track_documentation({attribute, Anno, doc, DocStatus}, State) + when DocStatus =:= hidden; DocStatus =:= false -> + update_docstatus(State, {hidden, set_file_anno(Anno, State)}); +track_documentation({attribute, Anno, doc, Doc}, State) when is_list(Doc) -> + update_doc(State, {Doc, Anno}); +track_documentation({attribute, Anno, doc, Doc}, State) when is_binary(Doc) -> + update_doc(State, {unicode:characters_to_list(Doc), Anno}); +track_documentation(_, State) -> + State. + +upsert_documentation_from_terminal_item({function, _Anno, F, Arity, _}, State) -> + upsert_documentation(function, F, Arity, State); +upsert_documentation_from_terminal_item({attribute, _Anno, TypeOrOpaque, {TypeName, _TypeDef, TypeArgs}},State) + when TypeOrOpaque =:= type; TypeOrOpaque =:= opaque -> + Arity = length(fun_to_varargs(TypeArgs)), + upsert_documentation(type, TypeName, Arity, State); +upsert_documentation_from_terminal_item({attribute, _Anno, callback, {{CB, Arity}, _Form}}, State) -> + upsert_documentation(callback, CB, Arity, State); +upsert_documentation_from_terminal_item(_, State) -> + State. + +upsert_documentation(Tag, Name, Arity, State) when Tag =:= function; + Tag =:= type; + Tag =:= opaque; + Tag =:= callback -> + Docs = State#docs.docs, + State1 = case maps:get({Tag, Name, Arity}, Docs, none) of + none -> + Status = State#docs.doc_status, + Doc = State#docs.doc, + Meta = State#docs.meta, + State#docs{docs = Docs#{{Tag, Name, Arity} => {Status, Doc, Meta}}}; + {Status, Documentation, Meta} -> + Status1 = upsert_state(Status, State#docs.doc_status), + Doc = upsert_doc(Documentation, State#docs.doc), + Meta1 = upsert_meta(Meta, State#docs.meta), + State#docs{docs = Docs#{{Tag, Name, Arity} := {Status1, Doc, Meta1}}} + end, + reset_state(State1). + +%% Keep status unless there is a change. +upsert_state({hidden, _}=Hidden, _) -> + Hidden; +upsert_state(Status, none) -> + Status; +upsert_state(_Status, Tag) -> + case Tag of + {hidden, _} -> + Tag; + set -> + Tag + end. + +upsert_doc(Documentation, none) -> + Documentation; +upsert_doc(_, Documentation) -> + Documentation. + +upsert_meta(Meta0, Meta1) -> + maps:merge(Meta0, Meta1). + + +extract_docformat0({attribute, _ModuleDocAnno, moduledoc, MetaFormat}, State) when is_map(MetaFormat) -> + case maps:get(format, MetaFormat, not_found) of + not_found -> State; + Format when is_list(Format) -> State#docs{docformat = unicode:characters_to_binary(Format)}; + Format when is_binary(Format) -> State#docs{docformat = Format} + end; +extract_docformat0(_, State) -> + State. + +%% +%% Sets module documentation attributes +%% +extract_moduledoc0({attribute, ModuleDocAnno, moduledoc, false}, State) -> + extract_moduledoc0({attribute, ModuleDocAnno, moduledoc, hidden}, State); +extract_moduledoc0({attribute, ModuleDocAnno, moduledoc, hidden}, State) -> + State#docs{moduledoc = {ModuleDocAnno, create_module_doc(hidden)}}; +extract_moduledoc0({attribute, ModuleDocAnno, moduledoc, ModuleDoc}, State) when is_list(ModuleDoc) -> + Doc = unicode:characters_to_binary(string:trim(ModuleDoc)), + State#docs{moduledoc = {set_file_anno(ModuleDocAnno, State), create_module_doc(Doc)}}; +extract_moduledoc0(_, State) -> + State. + + +extract_module_meta({attribute, _ModuleDocAnno, moduledoc, MetaDoc}, State) when is_map(MetaDoc) -> + State#docs{moduledoc_meta = maps:merge(State#docs.moduledoc_meta, MetaDoc)}; +extract_module_meta(_, State) -> + State. + +extract_exported_funs({attribute,_ANNO,export,ExportedFuns}, State) -> + update_export_funs(State, ExportedFuns); +extract_exported_funs(_, State) -> + State. + + +%% Sets the filename based on the module +extract_file({attribute, _Anno, file, {Filename, _A}}, State) -> + update_filename(State, Filename); +extract_file(_, State) -> + State. + +extract_record({attribute, Anno, record, {Name, Fields}}, State) -> + TypeFields = filtermap( + fun({typed_record_field, RecordField, Type}) -> + {true, {type, Anno, field_type, [element(3, RecordField), Type]}}; + (_) -> + false + end, Fields), + State#docs{ records = (State#docs.records)#{ Name => TypeFields } }; +extract_record(_, State) -> + State. + +%% +%% Extracts types with documentation attribute set to `hidden` or `false`. +%% +%% E.g.: +%% +%% -doc hidden. +%% -type foo() :: integer(). +%% +extract_hidden_types0({attribute, _Anno, doc, DocStatus}, State) when + DocStatus =:= hidden; DocStatus =:= false -> + State#docs{hidden_status = hidden}; +extract_hidden_types0({attribute, _Anno, doc, _}, State) -> + State; +extract_hidden_types0({attribute, _Anno, TypeOrOpaque, {Name, _Type, Args}}, #docs{hidden_status = hidden, + hidden_types = HiddenTypes}=State) + when TypeOrOpaque =:= type; TypeOrOpaque =:= opaque -> + State#docs{hidden_status = none, + hidden_types = sets:add_element({Name, length(Args)}, HiddenTypes)}; +extract_hidden_types0(_, State) -> + State#docs{hidden_status = none}. + + +%% +%% Adds type definitions / user-defined types to the state +%% +%% Necessary to provide warnings using the mapping +%% #{{TypeName, length(Args)} => Anno}. +%% +extract_type_defs0({attribute, Anno, TypeOrOpaque, {TypeName, _TypeDef, TypeArgs}}, #docs{type_defs = TypeDefs}=State) + when TypeOrOpaque =:= type; TypeOrOpaque =:= opaque -> + Args = fun_to_varargs(TypeArgs), + Type = {TypeName, length(Args)}, + State#docs{type_defs = TypeDefs#{Type => Anno}}; +extract_type_defs0(_, State) -> + State. + +%% +%% Creates a reachable type graph. +%% +%% Given a type `-type X(Args) :: Args2.`, `X` is a vertex that +%% connects with vertices from Args and Args, creating a reachable +%% type graph. +%% +extract_type_dependencies({attribute, _Anno, TypeOrOpaque, {TypeName, TypeDef, TypeArgs}}, + #docs{type_dependency = TypeDependency}=State) + when TypeOrOpaque =:= type; TypeOrOpaque =:= opaque -> + Types = extract_user_types([TypeArgs, TypeDef], State), + Type = {TypeName, length(TypeArgs)}, + digraph:add_vertex(TypeDependency, Type), + _ = [begin + digraph:add_vertex(TypeDependency, TypeAndArity), + digraph:add_edge(TypeDependency, Type, TypeAndArity) + end || TypeAndArity <- maps:keys(Types)], + State; +extract_type_dependencies(_, State) -> + State. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% Helper functions +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +-spec create_module_doc(ModuleDoc :: binary() | atom()) -> map(). +create_module_doc(ModuleDoc) when is_atom(ModuleDoc) -> + ModuleDoc; +create_module_doc(ModuleDoc) when not is_atom(ModuleDoc) -> + create_module_doc(<<"en">>, ModuleDoc). + +-spec create_module_doc(Lang :: binary(), ModuleDoc :: binary()) -> map(). +create_module_doc(Lang, ModuleDoc) -> + #{Lang => ModuleDoc}. + +-spec new_state(Dirname :: file:filename(), Filename :: file:filename(), + Opts :: [opt()]) -> internal_docs(). +new_state(Dirname, Filename, Opts) -> + DocsV1 = #docs_v1{}, + reset_state(#docs{cwd = Dirname, filename = Filename, + curr_filename = Filename, opts = Opts, + moduledoc_meta = DocsV1#docs_v1.metadata}). + + +-spec reset_state(State :: internal_docs()) -> internal_docs(). +reset_state(State) -> + State#docs{doc = none, + doc_status = none, + meta = #{exported => false}}. + +update_docstatus(State, V) -> + State#docs{doc_status = V}. + + +update_ast(function, #docs{ast_fns=AST}=State, Fn) -> + State#docs{ast_fns = [Fn | AST]}; +update_ast(Type,#docs{ast_types=AST}=State, Fn) when Type =:= type; Type =:= opaque-> + State#docs{ast_types = [Fn | AST]}; +update_ast(callback, #docs{ast_callbacks = AST}=State, Fn) -> + State#docs{ast_callbacks = [Fn | AST]}. + +-spec update_meta(State :: internal_docs(), Meta :: map()) -> internal_docs(). +update_meta(#docs{meta = Meta0}=State, Meta1) -> + State#docs{meta = maps:merge(Meta0, Meta1)}. + +-spec update_user_defined_types({type | callback | function, term(), integer()}, + State :: internal_docs()) -> internal_docs(). +update_user_defined_types({_Attr, _F, _A}=Key, + #docs{user_defined_types = UserDefinedTypes, + last_read_user_types = LastAddedTypes}=State) -> + Docs = State#docs.docs, + case maps:get(Key, Docs, none) of + {{hidden, _Anno}, _, _} -> + State#docs{last_read_user_types = #{}}; + _ -> + State#docs{user_defined_types = sets:union(UserDefinedTypes, sets:from_list(maps:keys(LastAddedTypes))), + last_read_user_types = #{}} + end. + +-spec update_doc(State :: internal_docs(), Doc) -> internal_docs() when + Doc :: {unicode:chardata(), erl_anno:anno()} | atom(). +update_doc(#docs{doc_status = DocStatus}=State, Doc0) -> + %% The exported := true only applies to types and should be ignored for functions. + %% This is because we need to export private types that are used on public + %% functions, or the documentation will create dead links. + State1 = update_docstatus(State, set_doc_status(DocStatus)), + State2 = update_meta(State1, #{exported => true}), + case Doc0 of + none -> + State2; + {Doc, Anno} -> + State2#docs{doc = {string:trim(Doc), set_file_anno(Anno, State2)}} + end. + +set_file_anno(Anno, State) -> + case {State#docs.curr_filename, erl_anno:file(Anno)} of + {ModuleName, undefined} when ModuleName =/= "", + ModuleName =/= State#docs.filename -> + erl_anno:set_file(ModuleName, Anno); + _ -> + Anno + end. + +%% Sets the doc status from `none` to `set`. +%% Leave unchanged if the status was already set to something. +%% +set_doc_status(none) -> + set; +set_doc_status(Other) -> + Other. + +-spec update_filename(State :: internal_docs(), ModuleName :: unicode:chardata()) -> internal_docs(). +update_filename(#docs{}=State, ModuleName) -> + State#docs{curr_filename = ModuleName}. + +-spec update_export_funs(State :: internal_docs(), proplists:proplist()) -> internal_docs(). +update_export_funs(State, ExportedFuns) -> + ExportedFuns1 = sets:union(State#docs.exported_functions, sets:from_list(ExportedFuns)), + State#docs{exported_functions = ExportedFuns1}. + +-spec update_export_types(State :: internal_docs(), proplists:proplist()) -> internal_docs(). +update_export_types(State, ExportedTypes) -> + ExportedTypes1 = sets:union(State#docs.exported_types, sets:from_list(ExportedTypes)), + State#docs{exported_types = ExportedTypes1}. + +update_export_all(State, ExportAll) -> + State#docs{ export_all = ExportAll }. + +remove_exported_type_info(Key, #docs{docs = Docs}=State) -> + {Status, Doc, Meta} = maps:get(Key, Docs), + Docs1 = maps:update(Key, {Status, Doc, maps:remove(exported, Meta)}, Docs), + State#docs{docs = Docs1}. + +extract_documentation(AST, State) -> + State1 = foldl(fun extract_documentation0/2, State, AST), + State2 = purge_types_not_used_from_exported_functions(State1), + State3 = purge_unreachable_types(State2), + warnings(AST, State3). + +%% +%% purges types that are not used in exported functions. +%% the type dependency field in docs does not keep track of which type +%% is used in a public function, it simply connects all types. +%% types of hidden functions may exist in the reachable type graph +%% and they should be ignored unless reachable from +purge_types_not_used_from_exported_functions(#docs{user_defined_types = UserDefinedTypes}=State) -> + AstTypes = filter(fun ({{_, F, A}, _Anno, _Slogan, _Doc, #{exported := Exported}}) -> + sets:is_element({F, A}, UserDefinedTypes) orelse Exported + end, State#docs.ast_types), + State#docs{ast_types = AstTypes }. + +purge_unreachable_types(#docs{types_from_exported_funs = TypesFromExportedFuns, + type_dependency = TypeDependency}=State) -> + SetTypesFromExportedFns = sets:from_list(maps:keys(TypesFromExportedFuns)), + SetTypes = sets:union(SetTypesFromExportedFns, State#docs.exported_types), + ReachableTypes = digraph_utils:reachable(sets:to_list(SetTypes), TypeDependency), + ReachableSet = sets:from_list(ReachableTypes), + AstTypes = filter(fun ({{_, F, A}, _Anno, _Slogan, _Doc, #{exported := Exported}}) -> + sets:is_element({F, A}, ReachableSet) orelse Exported + end, State#docs.ast_types), + State#docs{ast_types = AstTypes }. + +warnings(_AST, State) -> + WarnFuns = [fun warn_hidden_types_used_in_public_fns/1, + fun warn_missing_docs/1, + fun warn_missing_moduledoc/1, + fun warn_hidden_callback/1 + ], + foldl(fun (W, State0) -> W(State0) end, State, WarnFuns). + +warn_missing_docs(State) -> + DocNodes = process_docs(State), + foldl(fun warn_missing_docs/2, State, DocNodes). + +warn_hidden_callback(State) -> + L = maps:to_list(State#docs.docs), + NoWarn = flatten(proplists:get_all_values(nowarn_hidden_doc, State#docs.opts)), + case member(true, NoWarn) of + false -> + foldl(fun ({{callback, Name, Arity},{{hidden, Anno}, _, _}}, State0) -> + case member({Name, Arity}, NoWarn) of + false -> + Warning = {hidden_callback, {Name, Arity}}, + W = create_warning(Anno, Warning, State0), + State0#docs{ warnings = [W | State0#docs.warnings] }; + true -> + State0 + end; + (_, State0) -> + State0 + end, State, L); + true -> + State + end. + +%% hidden types with `-doc hidden.` or `-doc false.`, which are public (inside +%% `export_type([])`), and used in public functions, they do not make sense. It +%% is a type that is not documented (due to hidden property), visible in the +%% docs (because it is in export_type), and reference / used by a public +%% function cannot be used. +%% A type that is hidden, private, and used in an exported function will be documented +%% by the doc generation showing the internal type structure. +warn_hidden_types_used_in_public_fns(#docs{types_from_exported_funs = TypesFromExportedFuns, + type_dependency = TypeDependency, + type_defs = TypeDefs}=State) -> + NoWarn = flatten(proplists:get_all_values(nowarn_hidden_doc, State#docs.opts)), + case member(true, NoWarn) of + false -> + HiddenTypes = State#docs.hidden_types, + Types = maps:keys(TypesFromExportedFuns), + ReachableTypes = digraph_utils:reachable(Types, TypeDependency), + ReachableSet = sets:from_list(ReachableTypes), + Warnings = sets:intersection(HiddenTypes, ReachableSet), + FilteredWarnings = sets:filter(fun(Key) -> not member(Key, NoWarn) end, Warnings), + WarningsWithAnno = sets:map(fun (Key) -> + Anno = maps:get(Key, TypeDefs), + Warn = {hidden_type_used_in_exported_fun, Key}, + create_warning(Anno, Warn, State) + end, FilteredWarnings), + State#docs{warnings = State#docs.warnings ++ sets:to_list(WarningsWithAnno) }; + true -> + State + end. + +create_warning(Anno, Warning, State) -> + Filename = erl_anno_file(Anno, State), + Location = erl_anno:location(Anno), + {Filename, [{Location, ?MODULE, Warning}]}. + +warn_missing_docs({KFA, Anno, _, Doc, _}, State) -> + case proplists:get_value(warn_missing_doc, State#docs.opts, false) of + true when Doc =:= none -> + Warning = {missing_doc, KFA}, + State#docs{ warnings = [create_warning(Anno, Warning, State) | State#docs.warnings] }; + _false -> + State + end. + +warn_missing_moduledoc(State) -> + {_, ModuleDoc} = State#docs.moduledoc, + case proplists:get_value(warn_missing_doc, State#docs.opts, false) of + true when ModuleDoc =:= none -> + Anno = erl_anno:new(?DEFAULT_MODULE_DOC_LOC), + Warning = missing_moduledoc, + State#docs{ warnings = [create_warning(Anno, Warning, State) | State#docs.warnings] }; + _false -> + State + end. + +%% +%% Extracts documentation +%% +%% This algorithm may use temporal state to keep track of documentation. +%% Example: By looking at `-doc ...` one cannot know whether the doc +%% is attached to a function, type, callback. +extract_documentation0({attribute, _Anno, file, {Filename, _A}}, State) -> + update_filename(State, Filename); +extract_documentation0({attribute, _Anno, spec, _}=AST, State) -> + extract_documentation_spec(AST, State); +extract_documentation0({function, _Anno, F, A, _Body}=AST, State) -> + State1 = remove_exported_type_info({function, F, A}, State), + extract_documentation_from_funs(AST, State1); +extract_documentation0({attribute, _Anno, TypeOrOpaque, _}=AST,State) + when TypeOrOpaque =:= type; TypeOrOpaque =:= opaque -> + extract_documentation_from_type(AST, State); +extract_documentation0({attribute, _Anno, callback, {{CB, A}, _Form}}=AST, State) -> + State1 = remove_exported_type_info({callback, CB, A}, State), + extract_documentation_from_cb(AST, State1); +extract_documentation0(_, State) -> + State. + + +extract_documentation_spec({attribute, Anno, spec, {{Name,Arity}, SpecTypes}}, #docs{exported_functions = ExpFuns}=State) -> +%% this is because public functions may use private types and these private +%% types need to be included in the beam and documentation. + case sets:is_element({Name, Arity}, ExpFuns) orelse State#docs.export_all of + true -> + add_user_types(Anno, SpecTypes, State); + false -> + State + end; +extract_documentation_spec({attribute, Anno, spec, {{_Mod, Name,Arity}, SpecTypes}}, State) -> + extract_documentation_spec({attribute, Anno, spec, {{Name,Arity}, SpecTypes}}, State). + +add_user_types(_Anno, SpecTypes, State) -> + Types = extract_user_types(SpecTypes, State), + State1 = set_types_used_in_public_funs(State, Types), + set_last_read_user_types(State1, Types). + +%% pre: only call this function to add types from external functions. +set_types_used_in_public_funs(#docs{types_from_exported_funs = TypesFromExportedFuns}=State, Types) -> + Combiner = fun (_Key, Value1, Value2) -> Value1 ++ Value2 end, + Types0 = maps:merge_with(Combiner, TypesFromExportedFuns, Types), + State#docs{types_from_exported_funs = Types0}. + +set_last_read_user_types(#docs{}=State, Types) -> + State#docs{last_read_user_types = Types}. + +extract_user_types(Args, #docs{ records = Records }) -> + {Types, _Records} = extract_user_types(Args, {maps:new(), Records}), + Types; +extract_user_types(Types, Acc) when is_list(Types) -> + foldl(fun extract_user_types/2, Acc, Types); +extract_user_types({ann_type, _, [_Name, Type]}, Acc) -> + extract_user_types(Type, Acc); +extract_user_types({type, _, 'fun', Args}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type, _, map, Args}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type, _,record,[{atom, _, Name} | Args]}, {Acc, Records}) -> + NewArgs = uniq(fun({type, _, field_type, [{atom, _, FieldName} | _]}) -> + FieldName + end, Args ++ maps:get(Name, Records, [])), + extract_user_types(NewArgs, {Acc, maps:remove(Name, Records)}); +extract_user_types({remote_type,_,[_ModuleName,_TypeName,Args]}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type, _, tuple, Args}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type, _,union, Args}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({user_type, Anno, Name, Args}, {Acc, Records}) -> + %% append user type and continue iterating through lists in case of other + %% user-defined types to be added + Fun = fun (Value) -> [Anno | Value] end, + Acc1 = maps:update_with({Name, length(Args)}, Fun, [Anno], Acc), + extract_user_types(Args, {Acc1, Records}); +extract_user_types({type, _, bounded_fun, Args}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type,_,product,Args}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type,_,constraint,[{atom,_,is_subtype},Args]}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type, _, map_field_assoc, Args}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type, _, map_field_exact, Args}, Acc) -> + extract_user_types(Args, Acc); +extract_user_types({type,_,field_type,[_Name, Type]}, Acc) -> + extract_user_types(Type, Acc); +extract_user_types({type, _,_BuiltIn, Args}, Acc) when is_list(Args)-> + %% Handles built-in types such as 'list', 'nil' 'range'. + extract_user_types(Args, Acc); +extract_user_types(_Else, Acc) -> + Acc. + +extract_documentation_from_type({attribute, Anno, TypeOrOpaque, {TypeName, _TypeDef, TypeArgs}=Types}, + #docs{docs = Docs, exported_types=ExpTypes}=State) + when TypeOrOpaque =:= type; TypeOrOpaque =:= opaque -> + Args = fun_to_varargs(TypeArgs), + Key = {type, TypeName, length(TypeArgs)}, + + % we assume it exists because a first pass must have added it + {Status, Doc, Meta} = maps:get(Key, Docs), + + State0 = add_last_read_user_type(Anno, Types, State), + Type = {TypeName, length(Args)}, + + Docs1 = maps:update(Key, {Status, Doc, Meta#{exported := sets:is_element(Type, ExpTypes)}}, Docs), + State2 = State0#docs {docs = Docs1}, + State3 = gen_doc_with_slogan({type, Anno, TypeName, length(Args), Args}, State2), + add_type_defs(Type, State3). + +add_type_defs(Type, #docs{type_defs = TypeDefs, ast_types = [{_KFA, Anno, _Slogan, _Doc, _Meta} | _]}=State) -> + State#docs{type_defs = TypeDefs#{Type => Anno}}. + + +add_last_read_user_type(_Anno, {_TypeName, TypeDef, TypeArgs}, State) -> + Types = extract_user_types([TypeArgs, TypeDef], State), + set_last_read_user_types(State, Types). + +%% NOTE: Terminal elements for the documentation, such as `-type`, `-opaque`, `-callback`, +%% and functions always need to reset the state when they finish, so that new +%% new AST items start with a clean slate. +extract_documentation_from_funs({function, Anno, F, A, [{clause, _, ClauseArgs, _, _}]}, + #docs{exported_functions = ExpFuns}=State) -> + case (sets:is_element({F, A}, ExpFuns) orelse State#docs.export_all) of + true -> + gen_doc_with_slogan({function, Anno, F, A, ClauseArgs}, State); + false -> + reset_state(State) + end; +extract_documentation_from_funs({function, _Anno0, F, A, _Body}=AST, + #docs{exported_functions=ExpFuns}=State) -> + {Doc1, Anno1} = fetch_doc_and_anno(State, AST), + case sets:is_element({F, A}, ExpFuns) orelse State#docs.export_all of + true -> + {Slogan, DocsWithoutSlogan} = extract_slogan(Doc1, State, F, A), + AttrBody = {function, F, A}, + gen_doc(Anno1, AttrBody, Slogan, DocsWithoutSlogan, State); + false -> + reset_state(State) + end. + +extract_documentation_from_cb({attribute, Anno, callback, {{CB, A}, Form}}, State) -> + %% adds user types as part of possible types that need to be exported + State2 = add_user_types(Anno, Form, State), + Args = case Form of + [Fun] -> + fun_to_varargs(Fun); + _ -> %% multi-clause + Form + end, + gen_doc_with_slogan({callback, Anno, CB, A, Args}, State2). + +%% Generates documentation +-spec gen_doc(Anno, AttrBody, Slogan, Docs, State) -> Response when + Anno :: erl_anno:anno(), + AttrBody :: {function | type | callback, term(), integer()}, + Slogan :: unicode:chardata(), + Docs :: none | hidden | unicode:chardata() | #{ <<_:16>> => unicode:chardata() }, + State :: internal_docs(), + Response :: internal_docs(). +gen_doc(Anno, AttrBody, Slogan, Docs, State) when not is_atom(Docs), not is_map(Docs) -> + gen_doc(Anno, AttrBody, Slogan, #{ <<"en">> => unicode:characters_to_binary(string:trim(Docs)) }, State); +gen_doc(Anno, {Attr, _F, _A}=AttrBody, Slogan, Docs, #docs{docs=DocsMap}=State) -> + {_Status, _Doc, Meta} = maps:get(AttrBody, DocsMap), + Result = {AttrBody, Anno, [unicode:characters_to_binary(Slogan)], Docs, + maybe_add_deprecation(AttrBody, Meta, State)}, + State1 = update_user_defined_types(AttrBody, State), + reset_state(update_ast(Attr, State1, Result)). + +erl_anno_file(Anno, State) -> + case erl_anno:file(Anno) of + undefined -> + State#docs.filename; + FN -> FN + end. + +maybe_add_deprecation(_KNA, #{ deprecated := Deprecated } = Meta, _State) -> + Meta#{ deprecated := unicode:characters_to_binary(Deprecated) }; +maybe_add_deprecation({Kind, Name, Arity}, Meta, #docs{ module = Module, + deprecated = Deprecations }) -> + maybe + error ?= maps:find({Kind, Name, Arity}, Deprecations), + error ?= maps:find({Kind, Name, '_'}, Deprecations), + error ?= maps:find({Kind, '_', Arity}, Deprecations), + error ?= maps:find({Kind, '_', '_'}, Deprecations), + Meta + else + {ok, Value} -> + Text = + if Kind =:= function -> + erl_lint:format_error({deprecated, {Module,Name,Arity}, + info_string(Value)}); + Kind =:= type -> + erl_lint:format_error({deprecated_type, {Module,Name,Arity}, + info_string(Value)}) + end, + Meta#{ deprecated => unicode:characters_to_binary(Text) } + end. + +%% Copies from lib/stdlib/scripts/update_deprecations +info_string(undefined) -> + "see the documentation for details"; +info_string(next_version) -> + "will be removed in the next version. " + "See the documentation for details"; +info_string(next_major_release) -> + "will be removed in the next major release. " + "See the documentation for details"; +info_string(eventually) -> + "will be removed in a future release. " + "See the documentation for details"; +info_string(String) when is_list(String) -> + String. + +%% Generates the documentation inferring the slogan from the documentation. +gen_doc_with_slogan({Attr, _Anno0, F, A, Args}=AST, State) -> + {Doc1, Anno1} = fetch_doc_and_anno(State, AST), + {Slogan, DocsWithoutSlogan} = extract_slogan(Doc1, State, F, A, Args), + AttrBody = {Attr, F, A}, + gen_doc(Anno1, AttrBody, Slogan, DocsWithoutSlogan, State). + +fetch_doc_and_anno(#docs{docs = DocsMap}=State, {Attr, Anno0, F, A, _Args}) -> + %% a first pass guarantees that DocsMap cannot be empty + {DocStatus, Doc, _Meta} = maps:get({Attr, F, A}, DocsMap), + case {DocStatus, Doc} of + {{hidden, Anno}, _} -> {hidden, Anno}; + {_, none} -> {none, set_file_anno(Anno0, State)}; + {_, {Doc1, Anno}} -> {Doc1, Anno} + end. + +-spec fun_to_varargs(tuple() | term()) -> list(term()). +fun_to_varargs({type, _, bounded_fun, [T|_]}) -> + fun_to_varargs(T); +fun_to_varargs({type, _, 'fun', [{type,_,product,Args}|_] }) -> + map(fun fun_to_varargs/1, Args); +fun_to_varargs({ann_type, _, [Name|_]}) -> + Name; +fun_to_varargs({var,_,_} = Name) -> + Name; +fun_to_varargs(Else) -> + Else. + +extract_slogan(Doc, State, F, A) -> + extract_slogan(Doc, State, F, A, [invalid]). +extract_slogan(Doc, State, F, A, Args) -> + %% order of the strategy matters + StrategyOrder = [fun slogan_strategy_doc_attr/5, + fun slogan_strategy_spec/5, + fun slogan_strategy_args/5, + fun slogan_strategy_default/5], + + %% selection alg. tries strategy until one strategy + %% returns value =/= false + SloganSelection = fun (Fun, false) -> Fun(Doc, State, F, A, Args); + (_F, Acc) -> Acc + end, + foldl(SloganSelection, false, StrategyOrder). + + +slogan_strategy_doc_attr(Doc, _State, F, A, _Args) -> + maybe + false ?= Doc =:= none orelse Doc =:= hidden, + [MaybeSlogan | Rest] = string:split(Doc, "\n"), + {ok, Toks, _} ?= erl_scan:string(unicode:characters_to_list([MaybeSlogan,"."])), + {ok, [{call,_,{atom,_,F},SloganArgs}]} ?= erl_parse:parse_exprs(Toks), + A ?= length(SloganArgs), + {MaybeSlogan, Rest} + else + _ -> + false + end. + +slogan_strategy_spec(Doc, State, F, A, _Args) -> + case maps:get({F, A}, State#docs.slogans, none) of + {F, Vars, A} -> + VarString = join(", ",[atom_to_list(Var) || Var <- Vars]), + Slogan = unicode:characters_to_list(io_lib:format("~p(~s)", [F, VarString])), + {Slogan, Doc}; + none -> + false + end. + +slogan_strategy_args(Doc, _State, F, _A, Args) -> + case all(fun is_var_without_underscore/1, Args) of + true -> + {extract_slogan_from_args(F, Args), Doc}; + false -> + false + end. + +slogan_strategy_default(Doc, _State, F, A, _Args) -> + {io_lib:format("~p/~p",[F,A]), Doc}. + + +is_var_without_underscore({var, _, N}) -> + N =/= '_'; +is_var_without_underscore(_) -> + false. + +extract_slogan_from_args(F, Args) -> + io_lib:format("~p(~ts)",[F, join(", ",[string:trim(atom_to_list(Arg),leading,"_") || {var, _, Arg} <- Args])]). diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl index d4e693aee070..43d55bb5d984 100644 --- a/lib/compiler/src/compile.erl +++ b/lib/compiler/src/compile.erl @@ -340,19 +340,19 @@ format_error_reason(Class, Reason, Stack) -> erl_error:format_exception(Class, Reason, Stack, Opts). %% The compile state record. --record(compile, {filename="" :: file:filename(), - dir="" :: file:filename(), - base="" :: file:filename(), - ifile="" :: file:filename(), - ofile="" :: file:filename(), - module=[] :: module() | [], - abstract_code=[] :: abstract_code(), %Abstract code for debugger. - options=[] :: [option()], %Options for compilation - mod_options=[] :: [option()], %Options for module_info - encoding=none :: none | epp:source_encoding(), - errors=[] :: errors(), - warnings=[] :: warnings(), - extra_chunks=[] :: [{binary(), binary()}]}). +-record(compile, {filename="" :: file:filename(), + dir="" :: file:filename(), + base="" :: file:filename(), + ifile="" :: file:filename(), + ofile="" :: file:filename(), + module=[] :: module() | [], + abstract_code=[] :: abstract_code(), %Abstract code for debugger. + options=[] :: [option()], %Options for compilation + mod_options=[] :: [option()], %Options for module_info + encoding=none :: none | epp:source_encoding(), + errors=[] :: errors(), + warnings=[] :: warnings(), + extra_chunks=[] :: [{binary(), binary()}]}). internal({forms,Forms}, Opts0) -> {_,Ps} = passes(forms, Opts0), @@ -812,6 +812,8 @@ standard_passes() -> {iff,'dpp',{listing,"pp"}}, ?pass(lint_module), + {unless,no_docs,?pass(beam_docs)}, + ?pass(remove_doc_attributes), {iff,'P',{src_listing,"P"}}, {iff,'to_pp',{done,"P"}}, @@ -821,7 +823,9 @@ standard_passes() -> abstr_passes(AbstrStatus) -> case AbstrStatus of - non_verified_abstr -> [{unless, no_lint, ?pass(lint_module)}]; + non_verified_abstr -> [{unless, no_lint, ?pass(lint_module)}, + {unless,no_docs,?pass(beam_docs)}, + ?pass(remove_doc_attributes)]; verified_abstr -> [] end ++ [ @@ -1027,17 +1031,20 @@ parse_module(_Code, St) -> Ret end. -do_parse_module(DefEncoding, #compile{ifile=File,options=Opts,dir=Dir}=St) -> +deterministic_filename(#compile{ifile=File,options=Opts}) -> SourceName0 = proplists:get_value(source, Opts, File), - SourceName = case member(deterministic, Opts) of - true -> - filename:basename(SourceName0); - false -> - case member(absolute_source, Opts) of - true -> paranoid_absname(SourceName0); - false -> SourceName0 - end - end, + case member(deterministic, Opts) of + true -> + filename:basename(SourceName0); + false -> + case member(absolute_source, Opts) of + true -> paranoid_absname(SourceName0); + false -> SourceName0 + end + end. + +do_parse_module(DefEncoding, #compile{ifile=File,options=Opts,dir=Dir}=St) -> + SourceName = deterministic_filename(St), StartLocation = case with_columns(Opts) of true -> {1,1}; @@ -1589,6 +1596,31 @@ core_inline_module(Code0, #compile{options=Opts}=St) -> save_abstract_code(Code, St) -> {ok,Code,St#compile{abstract_code=erl_parse:anno_to_term(Code)}}. +-define(META_DOC_CHUNK, <<"Docs">>). + + +%% Adds documentation attributes to extra_chunks (beam file) +beam_docs(Code, #compile{dir = Dir, options = Options, + extra_chunks = ExtraChunks }=St) -> + SourceName = deterministic_filename(St), + {ok, Docs, Ws} = beam_doc:main(Dir, SourceName, Code, Options), + MetaDocs = [{?META_DOC_CHUNK, term_to_binary(Docs)} | ExtraChunks], + {ok, Code, St#compile{extra_chunks = MetaDocs, + warnings = St#compile.warnings ++ Ws}}. + +%% Strips documentation attributes from the code +remove_doc_attributes(Code, St) -> + {ok, [Attr || Attr <- Code, not is_doc_attribute(Attr)], St}. + + +is_doc_attribute(Attr) -> + case Attr of + {attribute, _Anno, DocAttr, _Meta} + when DocAttr =:= doc; DocAttr =:= moduledoc; DocAttr =:= docformat -> + true; + _ -> false + end. + debug_info(#compile{module=Module,ofile=OFile}=St) -> {DebugInfo,Opts2} = debug_info_chunk(St), case member(encrypt_debug_info, Opts2) of @@ -2123,6 +2155,7 @@ pre_load() -> beam_core_to_ssa, beam_dict, beam_digraph, + beam_doc, beam_flatten, beam_jump, beam_opcodes, diff --git a/lib/compiler/src/compiler.app.src b/lib/compiler/src/compiler.app.src index 71588c08263c..3190b43468c7 100644 --- a/lib/compiler/src/compiler.app.src +++ b/lib/compiler/src/compiler.app.src @@ -31,6 +31,7 @@ beam_dict, beam_digraph, beam_disasm, + beam_doc, beam_flatten, beam_jump, beam_listing, @@ -83,5 +84,5 @@ {registered, []}, {applications, [kernel, stdlib]}, {env, []}, - {runtime_dependencies, ["stdlib-5.0","kernel-8.4","erts-13.0", + {runtime_dependencies, ["stdlib-@OTP-18622@","kernel-8.4","erts-13.0", "crypto-5.1"]}]}. diff --git a/lib/compiler/test/Makefile b/lib/compiler/test/Makefile index 43c7ccec7a23..925f6ba96924 100644 --- a/lib/compiler/test/Makefile +++ b/lib/compiler/test/Makefile @@ -12,6 +12,7 @@ MODULES= \ beam_bounds_SUITE \ beam_validator_SUITE \ beam_disasm_SUITE \ + beam_doc_SUITE \ beam_except_SUITE \ beam_jump_SUITE \ beam_reorder_SUITE \ diff --git a/lib/compiler/test/beam_doc_SUITE.erl b/lib/compiler/test/beam_doc_SUITE.erl new file mode 100644 index 000000000000..217698c13b07 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE.erl @@ -0,0 +1,603 @@ + +-module(beam_doc_SUITE). +-export([all/0, groups/0, init_per_group/2, end_per_group/2, singleton_moduledoc/1, singleton_doc/1, + docmodule_with_doc_attributes/1, hide_moduledoc/1, docformat/1, + singleton_docformat/1, singleton_meta/1, slogan/1, + types_and_opaques/1, callback/1, hide_moduledoc2/1, + private_types/1, export_all/1, equiv/1, spec/1, deprecated/1, warn_missing_doc/1, + doc_with_file/1, doc_with_file_error/1, all_string_formats/1, + docs_from_ast/1, spec_switch_order/1, user_defined_type/1, skip_doc/1]). + +-include_lib("common_test/include/ct.hrl"). +-include_lib("kernel/include/eep48.hrl"). +-include_lib("stdlib/include/assert.hrl"). + +-define(get_name(), atom_to_list(?FUNCTION_NAME)). + +all() -> + [{group, documentation_generation_tests}, doc_with_file]. + +groups() -> + [{documentation_generation_tests, [parallel], documentation_generation_tests()}]. + +init_per_group(_, Config) -> + Config. + +end_per_group(_, _Config) -> + ok. + +documentation_generation_tests() -> + [singleton_moduledoc, + singleton_doc, + docmodule_with_doc_attributes, + hide_moduledoc, + hide_moduledoc2, + docformat, + singleton_docformat, + singleton_meta, + slogan, + types_and_opaques, + callback, + private_types, + export_all, + equiv, + spec, + deprecated, + warn_missing_doc, + doc_with_file_error, + all_string_formats, + spec_switch_order, + docs_from_ast, + user_defined_type, + skip_doc + ]. + +singleton_moduledoc(Conf) -> + ModuleName = "singletonmoduledoc", + {ok, ModName} = default_compile_file(Conf, ModuleName), + + Mime = <<"text/markdown">>, + ModuleDoc = #{<<"en">> => <<"Moduledoc test module">>}, + {ok, {docs_v1, _,_, Mime,ModuleDoc, _,_}} = code:get_doc(ModName), + ok. + +singleton_doc(Conf) -> + ModuleName = "singletondoc", + {ok, ModName} = default_compile_file(Conf, ModuleName), + Mime = <<"text/markdown">>, + Doc = #{<<"en">> => <<"Doc test module">>}, + FooDoc = #{<<"en">> => <<"Tests multi-clauses">>}, + {ok, {docs_v1, 1,_, Mime, none, _, + [{{function, foo,1},_, [<<"foo(ok)">>], FooDoc, _}, + {{function, main,0},_, [<<"main()">>], Doc, _}]}} = code:get_doc(ModName), + ok. + +docmodule_with_doc_attributes(Conf) -> + ModuleName = "docmodule_with_doc_attributes", + {ok, ModName} = default_compile_file(Conf, ModuleName), + Mime = <<"text/markdown">>, + ModuleDoc = #{<<"en">> => <<"Moduledoc test module">>}, + Doc = #{<<"en">> => <<"Doc test module">>}, + FileDocs = #{<<"en">> => <<"# README\n\nThis is a test">>}, + {ok, #docs_v1{ anno = ModuleAnno, + beam_language = erlang, + format = Mime, + module_doc = ModuleDoc, + metadata = #{}, + docs = Docs + }} = code:get_doc(ModName), + + + [{{function,no_docs_multi,1},NoDocsMultiAnno,[<<"no_docs_multi/1">>],none,#{}}, + {{function,with_file_docs,0},FileDocsAnno, [<<"with_file_docs()">>],FileDocs,#{}}, + {{function,no_docs,0},NoDocsAnno, [<<"no_docs()">>],none,#{}}, + {{function,ok,0}, OkAnno, [<<"ok()">>],none,#{authors := "Someone"}}, + {{function, main,_},MainAnno, _, Doc, _}] = Docs, + + ?assertEqual(5, erl_anno:line(ModuleAnno)), + ?assertEqual(10, erl_anno:line(MainAnno)), + ?assertEqual(18, erl_anno:line(OkAnno)), + ?assertEqual(21, erl_anno:line(NoDocsAnno)), + ?assertEqual(1, erl_anno:line(FileDocsAnno)), + ?assertEqual("README", filename:basename(erl_anno:file(FileDocsAnno))), + ?assertEqual(28, erl_anno:line(NoDocsMultiAnno)), + + ok. + +hide_moduledoc(Conf) -> + {ok, ModName} = default_compile_file(Conf, "hide_moduledoc"), + {ok, {docs_v1, _,_, _Mime, hidden, _, + [{{function, main, 0}, _, [<<"main()">>], + #{ <<"en">> := <<"Doc test module">> }, #{}}]}} = code:get_doc(ModName), + ok. + +%% TODO: crashes +hide_moduledoc2(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + {ok, {docs_v1, _,_, _Mime, hidden, _, + [{{function,handle_call,1},{19,2},[<<"handle_call/1">>],hidden,#{}}, + {{function, main, 0}, _, [<<"main()">>], hidden, #{}}]}} = code:get_doc(ModName), + ok. + +docformat(Conf) -> + {ok, ModName} = default_compile_file(Conf, "docformat"), + ModuleDoc = #{<<"en">> => <<"Moduledoc test module">>}, + Meta = #{format => "text/asciidoc", + deprecated => "Use something else", + otp_doc_vsn => {1,0,0}, + since => "1.0"}, + Doc = #{<<"en">> => <<"Doc test module">>}, + {ok, {docs_v1, _,_, <<"text/asciidoc">>, ModuleDoc, Meta, + [{{function, main,_},_, _, Doc, _}]}} = code:get_doc(ModName), + ok. + +singleton_docformat(Conf) -> + {ok, ModName} = default_compile_file(Conf, "singleton_docformat"), + ModuleDoc = #{<<"en">> => <<"Moduledoc test module">>}, + Meta = #{format => <<"text/asciidoc">>, + deprecated => "Use something else", + otp_doc_vsn => {1,0,0}, + since => "1.0"}, + Doc = #{<<"en">> => <<"Doc test module\n\nMore info here">>}, + FunMeta = #{ authors => [<<"Beep Bop">>], equiv => <<"main/3">> }, + {ok, {docs_v1, _,erlang, <<"text/asciidoc">>, ModuleDoc, Meta, + [{{function, main,0},_, [<<"main()">>], Doc, FunMeta}]}} = code:get_doc(ModName), + ok. + +singleton_meta(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + Meta = #{ authors => [<<"Beep Bop">>], equiv => <<"main/3">>}, + DocMain1 = #{<<"en">> => <<"Returns always ok.">>}, + {ok, {docs_v1, _,erlang, <<"text/markdown">>, none, _, + [{{function, main1,0},_, [<<"main1()">>], DocMain1, #{equiv := <<"main(_)">>}}, + {{function, main,0},_, [<<"main()">>], none, Meta}]}} + = code:get_doc(ModName), + ok. + +slogan(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + Doc = #{<<"en">> => <<"Returns ok.">>}, + BarDoc = #{ <<"en">> => <<"foo()\nNot a slogan since foo =/= bar">> }, + NoSloganDoc = #{ <<"en">> => <<"Not a slogan\n\nTests slogans in multi-clause">>}, + {ok, {docs_v1, _,_, _, none, _, + [Connect, MulticlauseSloganIgnored, SpecNoDocSlogan, NoDocSlogan, + Slogan2, Slogan1, NoSlogan, Bar, Main]}} = code:get_doc(ModName), + + {{function,connect,2},_, + [<<"connect(TCPSocket, TLSOptions)">>],none,#{equiv := <<"connect/3">>,since := <<"OTP R14B">>}} = Connect, + {{function,spec_multiclause_slogan_ignored,1},_,[<<"spec_multiclause_slogan_ignored(X)">>],none,#{}} = MulticlauseSloganIgnored, + {{function, spec_no_doc_slogan, 1}, _, [<<"spec_no_doc_slogan(Y)">>], none, #{}} = SpecNoDocSlogan, + {{function, no_doc_slogan, 1}, _, [<<"no_doc_slogan(X)">>], none, #{}}= NoDocSlogan, + {{function, spec_slogan, 2}, _, [<<"spec_slogan(Y, Z)">>], _, #{}} = Slogan2, + {{function, spec_slogan, 1}, _, [<<"spec_slogan(Y)">>], _, #{}} = Slogan1, + {{function, no_slogan,1},_,[<<"no_slogan/1">>], NoSloganDoc, #{}} = NoSlogan, + {{function, bar,0},_,[<<"bar()">>], BarDoc, #{}} = Bar, + {{function, main,1},_,[<<"main(Foo)">>], Doc, #{}} = Main, + ok. + +types_and_opaques(Conf) -> + ModuleName = ?get_name(), + {ok, ModName, Warnings} = default_compile_file(Conf, ModuleName, [return_warnings]), + TypeDoc = #{<<"en">> => <<"Represents the name of a person.">>}, + GenericsDoc = #{<<"en">> => <<"Tests generics">>}, + OpaqueDoc = #{<<"en">> => + <<"Represents the name of a person that cannot be named.">>}, + MaybeOpaqueDoc = #{<<"en">> => <<"mmaybe(X) ::= nothing | X.\n\nRepresents a maybe type.">>}, + MaybeMeta = #{ authors => "Someone else", exported => true }, + NaturalNumberMeta = #{since => "1.0", equiv => <<"non_neg_integer/0">>, exported => true}, + + {ok, {docs_v1, _,_, _, none, _, + [%% Type Definitions + Public, Intermediate, HiddenNoWarnType, HiddenType, OtherPrivateType, MyPrivateType, + MyMap, StateEnter, CallbackMode,CallbackResult, EncodingFunc, Three, + Two, One, Hidden, HiddenFalse, MMaybe, Unnamed, Param,NatNumber, Name, + HiddenIncludedType, + %% Functions + UsesPublic, Ignore, MapFun, PrivateEncoding, Foo + ]}} = code:get_doc(ModName), + + {{type,public,0},{128,2},[<<"public()">>],none,#{exported := true}} = Public, + {{type,intermediate,0},{127,2},[<<"intermediate()">>],none,#{exported := false}} = Intermediate, + {{type,hidden_nowarn_type,0},{123,2},[<<"hidden_nowarn_type()">>],hidden,#{exported := false}} = HiddenNoWarnType, + {{type,hidden_type,0},{120,2},[<<"hidden_type()">>],hidden,#{exported := false}} = HiddenType, + {{type,my_other_private_type,0},MyOtherPrivateTypeLine, + [<<"my_other_private_type()">>],none,#{exported := false}} = OtherPrivateType, + {{type,my_private_type,0},MyPrivateTypeLine, + [<<"my_private_type()">>],none,#{exported := false}} = MyPrivateType, + {{type,mymap,0},MyMapLine,[<<"mymap()">>],none,#{exported := false}} = MyMap, + {{type,state_enter,0},StateEnterLine,[<<"state_enter()">>],none,#{exported := false}}=StateEnter, + {{type,callback_mode,0},CallbackModeLine, [<<"callback_mode()">>],none,#{exported := false}} = CallbackMode, + {{type,callback_mode_result,0},CallbackResultLine, + [<<"callback_mode_result()">>],none,#{exported := true}} = CallbackResult, + {{type,encoding_func,0},_,[<<"encoding_func()">>],none,#{exported := false}} = EncodingFunc, + {{type,three,0},_,[<<"three()">>],none,#{exported := false}} = Three, + {{type,two,0},_,[<<"two()">>],none,#{exported := false}} = Two, + {{type,one,0},_,[<<"one()">>],none,#{exported := false}} = One, + {{type,hidden,0},_,[<<"hidden()">>],hidden,#{exported := true}} = Hidden, + {{type,hidden_false,0},_,[<<"hidden_false()">>],hidden, + #{exported := true, authors := "Someone else"}} = HiddenFalse, + {{type, mmaybe,1},_,[<<"mmaybe(X)">>], MaybeOpaqueDoc, MaybeMeta} = MMaybe, + {{type, unnamed,0},{30,2},[<<"unnamed()">>], OpaqueDoc, + #{equiv := <<"non_neg_integer()">>, exported := true}} = Unnamed, + {{type, param,1},_,[<<"param(X)">>], GenericsDoc, + #{equiv := <<"madeup()">>, exported := true}} = Param, + {{type, natural_number,0},_,[<<"natural_number()">>], none, NaturalNumberMeta} = NatNumber, + {{type, name,1},_,[<<"name(_)">>], TypeDoc, #{exported := true}} = Name, + {{type, hidden_included_type, 0}, _, _, hidden, #{exported := false }} = HiddenIncludedType, + + {{function,uses_public,0},{131,1},[<<"uses_public()">>],none,#{}} = UsesPublic, + {{function,ignore_type_from_hidden_fun,0},_,[<<"ignore_type_from_hidden_fun()">>],hidden,#{}} = Ignore, + {{function,map_fun,0},_,[<<"map_fun()">>],none,#{}} = MapFun, + {{function,private_encoding_func,2},_,[<<"private_encoding_func(Data, Options)">>],none,#{}} = PrivateEncoding, + {{function,foo,0},_,[<<"foo()">>],none,#{}} = Foo, + + ?assertEqual(106, erl_anno:line(MyOtherPrivateTypeLine)), + ?assertEqual(105, erl_anno:line(MyPrivateTypeLine)), + ?assertEqual(102, erl_anno:line(MyMapLine)), + ?assertEqual(99, erl_anno:line(StateEnterLine)), + ?assertEqual(98, erl_anno:line(CallbackModeLine)), + ?assertEqual(96, erl_anno:line(CallbackResultLine)), + + [{File, Ws}, {HrlFile, HrlWs}] = Warnings, + ?assertEqual("types_and_opaques.erl", filename:basename(File)), + ?assertEqual({{120,2}, beam_doc, + {hidden_type_used_in_exported_fun,{hidden_type,0}}}, lists:nth(4, Ws)), + + ?assertEqual("types_and_opaques.hrl", filename:basename(HrlFile)), + ?assertEqual({{1,2}, beam_doc, + {hidden_type_used_in_exported_fun,{hidden_included_type,0}}}, lists:nth(1, HrlWs)), + + {ok, ModName, [_]} = + default_compile_file(Conf, ModuleName, [return_warnings, nowarn_hidden_doc, nowarn_unused_type]), + + ok. + +callback(Conf) -> + ModuleName = ?get_name(), + {ok, ModName, [{File,Warnings}]} = + default_compile_file(Conf, ModuleName, [return_warnings, report]), + Doc = #{<<"en">> => <<"Callback fn that always returns ok.">>}, + ImpCallback = #{<<"en">> => <<"This is a test">>}, + FunctionDoc = #{<<"en">> => <<"all_ok()\n\nCalls all_ok/0">>}, + ChangeOrder = #{<<"en">> => <<"Test changing order">>}, + {ok, {docs_v1, _,_, _, none, _, + [{{callback,nowarn,1},{39,2},[<<"nowarn(Arg)">>],hidden,#{}}, + {{callback,warn,0},{36,2},[<<"warn()">>],hidden,#{}}, + {{callback,bounded,1},_,[<<"bounded(X)">>],none,#{}}, + {{callback,multi,1},_,[<<"multi(Argument)">>], + #{ <<"en">> := <<"A multiclause callback with slogan docs">> },#{}}, + {{callback,multi_no_slogan,1},_,[<<"multi_no_slogan/1">>],none,#{}}, + {{callback,ann,1},_,[<<"ann(X)">>],none,#{}}, + {{callback,param,1},_,[<<"param(X)">>],none,#{}}, + {{callback, change_order,0},_,[<<"change_order()">>], ChangeOrder, + #{equiv := <<"ok()">>}}, + {{callback, all_ok,0},_,[<<"all_ok()">>], Doc, #{}}, + {{function, main2,0},_,[<<"main2()">>], #{<<"en">> := <<"Second main">>}, + #{equiv := <<"main()">>}}, + {{function, main,0},_,[<<"main()">>], FunctionDoc, #{}}, + {{function, all_ok,0},_, [<<"all_ok()">>],ImpCallback, + #{equiv := <<"ok/0">>}} + ]}} = code:get_doc(ModName), + + ?assertEqual("callback.erl", filename:basename(File)), + io:format("Warnings: ~p~n", [Warnings]), + ?assertEqual(1, length(Warnings)), + ?assertMatch({{36,2},beam_doc,{hidden_callback,{warn,0}}}, lists:nth(1, Warnings)), + + {ok, ModName, []} = + default_compile_file(Conf, ModuleName, [return_warnings, report, nowarn_hidden_doc]), + + ok. + +private_types(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + + {ok, {docs_v1, _,_, _, none, _, + [ + %% Types + RemoteTypeT, TupleT, RecordAT, RecordInlineT, + MapValue2T, MapKey2T, MapValueT, MapKeyT, + FunRet2T, FunRetT, FunT, Complex, BoundedRetT, + ArgT, BoundedArgT, Private, HiddenExportT, PrivateCBT, + PublicT, PrivateT, + %% Callbacks + CBar, + %% Functions + Bounded, HiddenTypeExposed, Hidden, Bar]}} = code:get_doc(ModName), + + ?assertMatch({{type,remote_type_t,1}, _, _, none, #{exported := false}},RemoteTypeT), + ?assertMatch({{type,tuple_t,0}, _, _, none, #{exported := false}},TupleT), + ?assertMatch({{type,record_a_t,0}, _, _, none, #{exported := false}},RecordAT), + ?assertMatch({{type,record_inline_t,0}, _, _, none, #{exported := false}},RecordInlineT), + ?assertMatch({{type,map_value_2_t,0}, _, _, none, #{exported := false}},MapValue2T), + ?assertMatch({{type,map_key_2_t,0}, _, _, none, #{exported := false}},MapKey2T), + ?assertMatch({{type,map_value_t,0}, _, _, none, #{exported := false}},MapValueT), + ?assertMatch({{type,map_key_t,0}, _, _, none, #{exported := false}},MapKeyT), + ?assertMatch({{type,fun_ret_2_t,0}, _, _, none, #{exported := false}},FunRet2T), + ?assertMatch({{type,fun_ret_t,0}, _, _, none, #{exported := false}},FunRetT), + ?assertMatch({{type,fun_t,0}, _, _, none, #{exported := false}},FunT), + ?assertMatch({{type,complex,1}, _, _, none, #{exported := true}},Complex), + ?assertMatch({{type,bounded_ret_t,0}, _, _, none, #{exported := false}},BoundedRetT), + ?assertMatch({{type,arg_t,0}, _, _, none, #{exported := false}},ArgT), + ?assertMatch({{type,bounded_arg_t,0}, _, _, none, #{exported := false}},BoundedArgT), + ?assertMatch({{type,private,0}, {28,2}, [<<"private()">>], hidden, #{exported := false}},Private), + ?assertMatch({{type,hidden_export_t,0},_,[<<"hidden_export_t()">>],hidden,#{exported := true}},HiddenExportT), + ?assertMatch({{type,private_cb_t,0},_,_,none,#{exported := false}},PrivateCBT), + ?assertMatch({{type,public_t,0},_, [<<"public_t()">>], none,#{ exported := true}},PublicT), + ?assertMatch({{type,private_t,0},_, [<<"private_t()">>], none,#{ exported := false}},PrivateT), + ?assertMatch({{callback,bar,1},_,_,none,#{}},CBar), + ?assertMatch({{function,bounded,2},_,_,none,#{}},Bounded), + ?assertMatch({{function,hidden_type_exposed,0},{32,1},[<<"hidden_type_exposed()">>],none,#{}},HiddenTypeExposed), + ?assertMatch({{function,hidden,0},_,[<<"hidden()">>],hidden,#{}},Hidden), + ?assertMatch({{function,bar,0},_,[<<"bar()">>],none,#{}},Bar), + + ok. + + +export_all(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + ImpCallback = #{<<"en">> => <<"This is a test">>}, + FunctionDoc = #{<<"en">> => <<"all_ok()\n\nCalls all_ok/0">>}, + {ok, {docs_v1, _,_, _, none, _, + [{{function, main2,0},_,[<<"main2()">>], #{<<"en">> := <<"Second main">>}, + #{equiv := <<"main()">>}}, + {{function, main,0},_,[<<"main()">>], FunctionDoc, #{}}, + {{function, all_ok,0},_, [<<"all_ok()">>],ImpCallback, + #{equiv := <<"ok/0">>}} + ]}} = code:get_doc(ModName), + ok. + +equiv(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + {ok, {docs_v1, _,_, _, none, _, + [{{function, main, 2},_,[<<"main(A, B)">>], none, + #{ }}, + {{function, main, 1},_,[<<"main(A)">>], none, + #{ equiv := <<"main(A, 1)">> }} + ]}} = code:get_doc(ModName), + ok. + +spec(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + {ok, {docs_v1, _,_, _, none, _, + [{{type,no,0},_,[<<"no()">>],none,#{exported := false}}, + {{type,yes,0},_,[<<"yes()">>],none,#{exported := false}}, + {{callback,me,1},_,[<<"me/1">>],none,#{}}, + {{function,baz,1},_,[<<"baz(X)">>],none,#{}}, + {{function,foo,1},_,[<<"foo(X)">>],none,#{}}]}} = code:get_doc(ModName), + ok. + +user_defined_type(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + {ok, {docs_v1, _,_, _, none, _, []}} = code:get_doc(ModName), + ok. + +deprecated(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + {ok, {docs_v1, _,_, _, none, _, + [{{type,test,1},_,[<<"test(N)">>],none,#{deprecated := <<"the type deprecated:test(_) is deprecated; Deprecation reason">>}}, + {{type,test,0},_,[<<"test()">>],none,#{deprecated := <<"the type deprecated:test() is deprecated; see the documentation for details">>}}, + {{callback,test,0},_,[<<"test()">>],none,#{deprecated := <<"Meta reason">>}}, + {{function,test,2},_,[<<"test(N, M)">>],none,#{deprecated := <<"Meta reason">>}}, + {{function,test,1},_,[<<"test(N)">>],none,#{deprecated := <<"deprecated:test/1 is deprecated; Deprecation reason">>}}, + {{function,test,0},_,[<<"test()">>],none,#{deprecated := <<"deprecated:test/0 is deprecated; see the documentation for details">>}}]}} = + code:get_doc(ModName), + + {ok, ModName} = default_compile_file(Conf, ModuleName, [{d,'TEST_WILDCARD'}, + {d, 'REASON', next_major_release}]), + {ok, {docs_v1, _,_, _, none, _, + [{{type,test,1},_,[<<"test(N)">>],none,#{deprecated := <<"the type deprecated:test(_) is deprecated; see the documentation for details">>}}, + {{type,test,0},_,[<<"test()">>],none,#{deprecated := <<"the type deprecated:test() is deprecated; see the documentation for details">>}}, + {{callback,test,0},_,[<<"test()">>],none,#{deprecated := <<"Meta reason">>}}, + {{function,test,2},_,[<<"test(N, M)">>],none,#{deprecated := <<"Meta reason">>}}, + {{function,test,1},_,[<<"test(N)">>],none,#{deprecated := <<"deprecated:test/1 is deprecated; will be removed in the next major release. See the documentation for details">>}}, + {{function,test,0},_,[<<"test()">>],none,#{deprecated := <<"deprecated:test/0 is deprecated; see the documentation for details">>}}]}} = + code:get_doc(ModName), + + {ok, ModName} = default_compile_file(Conf, ModuleName, [{d,'ALL_WILDCARD'}, + {d,'REASON',next_version}, + {d,'TREASON',eventually}]), + {ok, {docs_v1, _,_, _, none, _, + [{{type,test,1},_,[<<"test(N)">>],none,#{deprecated := <<"the type deprecated:test(_) is deprecated; will be removed in a future release. See the documentation for details">>}}, + {{type,test,0},_,[<<"test()">>],none,#{deprecated := <<"the type deprecated:test() is deprecated; see the documentation for details">>}}, + {{callback,test,0},_,[<<"test()">>],none,#{deprecated := <<"Meta reason">>}}, + {{function,test,2},_,[<<"test(N, M)">>],none,#{deprecated := <<"Meta reason">>}}, + {{function,test,1},_,[<<"test(N)">>],none,#{deprecated := <<"deprecated:test/1 is deprecated; will be removed in the next version. See the documentation for details">>}}, + {{function,test,0},_,[<<"test()">>],none,#{deprecated := <<"deprecated:test/0 is deprecated; see the documentation for details">>}}]}} = + code:get_doc(ModName), + ok. + +warn_missing_doc(Conf) -> + ModuleName = ?get_name(), + {ok, ModName, [{File,Warnings}, {HrlFile, HrlWarnings}]} = + default_compile_file(Conf, ModuleName, [return_warnings, warn_missing_doc, report]), + + {ok, {docs_v1, _,_, _, none, _, + [{{type,test,1},_,[<<"test(N)">>],none,_}, + {{type,test,0},_,[<<"test()">>],none,_}, + {{callback,test,0},_,[<<"test()">>],none,_}, + {{function,test,1},_,[<<"test(N)">>],none,_}, + {{function,test,0},_,[<<"test()">>],none,_}, + {{function,test,2},_,[<<"test(N, M)">>],none,_}]} + } = code:get_doc(ModName), + + ?assertEqual("warn_missing_doc.erl", filename:basename(File)), + ?assertEqual(6, length(Warnings)), + ?assertMatch({1, beam_doc, missing_moduledoc}, lists:nth(1, Warnings)), + ?assertMatch({{6,2}, beam_doc, {missing_doc, {type,test,0}}}, lists:nth(2, Warnings)), + ?assertMatch({{7,2}, beam_doc, {missing_doc, {type,test,1}}}, lists:nth(3, Warnings)), + ?assertMatch({{9,2}, beam_doc, {missing_doc, {callback,test,0}}}, lists:nth(4, Warnings)), + ?assertMatch({{13,1}, beam_doc, {missing_doc, {function,test,0}}}, lists:nth(5, Warnings)), + ?assertMatch({{14,1}, beam_doc, {missing_doc, {function,test,1}}}, lists:nth(6, Warnings)), + + ?assertEqual("warn_missing_doc.hrl", filename:basename(HrlFile)), + ?assertEqual(1, length(HrlWarnings)), + ?assertMatch({{2,1}, beam_doc, {missing_doc, {function,test,2}}}, lists:nth(1, HrlWarnings)), + + ok. + +doc_with_file(Conf) -> + ModuleName = ?get_name(), + {ok, Cwd} = file:get_cwd(), + try + ok = file:set_cwd(proplists:get_value(data_dir, Conf)), + {ok, ModName} = default_compile_file(Conf, ModuleName, [{i, "./folder"}]), + {ok, {docs_v1, ModuleAnno,_, _, #{<<"en">> := <<"# README\n\nThis is a test">>}, _, + [{{type,bar,1},_,[<<"bar(X)">>],none,#{exported := false}}, + {{type,foo,1},_,[<<"foo(X)">>],none,#{exported := true}}, + {{type,private_type_exported,0},_,[<<"private_type_exported()">>], + #{<<"en">> := <<"# TYPES\n\nTest">>}, #{exported := false}}, + {{function,main2,1},Main2Anno,[<<"main2(I)">>], + #{<<"en">> := <<"# File\n\ntesting fetching docs from other folders">>}, #{}}, + {{function,main,1},_,[<<"main(Var)">>], + #{<<"en">> := <<"# Fun\n\nTest importing function">>},#{}}]}} = code:get_doc(ModName), + + ?assertEqual(1, erl_anno:line(ModuleAnno)), + ?assertEqual(1, erl_anno:line(Main2Anno)), + ?assertEqual("./folder/FILE", erl_anno:file(Main2Anno)), + ok + after + ok = file:set_cwd(Cwd) + end. + +doc_with_file_error(Conf) -> + ModuleName = ?get_name(), + {error, + [{_, + [{{6,2},epp,{moduledoc,file,"doesnotexist"}}, + {{8,2},epp,{doc,file,"doesnotexist"}}, + {{11,2},epp,{doc,file,"doesnotexist"}}]}] = Errors, []} = default_compile_file(Conf, ModuleName), + [[Mod:format_error(Error) || {_Loc, Mod, Error} <- Errs] || {_File, Errs} <- Errors], + {error, _, []} = default_compile_file(Conf, ModuleName, [report]), + ok. + +all_string_formats(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + + {ok, {docs_v1, _ModuleAnno,_, _, #{<<"en">> := <<"Moduledoc test module">>}, _, + [ + {{function,six,0},_,_, #{<<"en">> := <<"all_string_formats-all_string_formats">>}, #{}}, + {{function,five,0},_,_, #{<<"en">> := <<"all_string_formats-Doc module">>}, #{}}, + {{function,four,0},_,_, #{<<"en">> := <<"Doc test mödule"/utf8>>}, #{}}, + {{function,three,0},_,_, #{<<"en">> := <<"Doctestmodule">>}, #{}}, + {{function,two,0},_,_, #{<<"en">> := <<"Doc test module">>}, #{}}, + {{function,one,0},_,_, #{<<"en">> := <<"Doc test module">>}, #{}} + ]}} = code:get_doc(ModName), + ok. + +spec_switch_order(Conf) -> + ModuleName = ?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName), + + {ok, {docs_v1, _ModuleAnno,_, _, _, _, + [NotFalse, Other, Bar, Foo]}} = code:get_doc(ModName), + {{function,not_false,0}, {53,1}, [<<"not_false()">>], none,#{}} = NotFalse, + {{function,other,0},{37,2},[<<"other()">>],hidden,#{}} = Other, + {{function,bar,1},{31,2},[<<"bar(X)">>],hidden,#{}} = Bar, + {{function,foo,1}, {23, 2}, [<<"foo(Var)">>], #{ <<"en">> := <<"Foo does X">> }, #{}} = Foo. + +skip_doc(Conf) -> + ModuleName =?get_name(), + {ok, ModName} = default_compile_file(Conf, ModuleName, [no_docs]), + + {ok,{docs_v1,0,erlang,<<"application/erlang+html">>,none, + #{generated := true, + otp_doc_vsn := {1,0,0}}, + [{{function,main,0},{8,1},[<<"main/0">>],none,#{}}, + {{function,foo,1},{16,1},[<<"foo/1">>],none,#{}}]}} = code:get_doc(ModName), + + {ok, _ModName} = compile_file(Conf, ModuleName, [report, return_errors, no_docs]), + {error, missing} = code:get_doc(ModName), + ok. + + +docs_from_ast(_Conf) -> + Code = """ + -module(test). + -moduledoc "moduledoc". + -export([main/0]). + -doc "main". + main() -> ok. + """, + + {ok, test, BeamCode} = compile:forms(scan_and_parse(Code),[debug_info]), + {ok, {test, [{documentation, Docs }]}} = beam_lib:chunks(BeamCode, [documentation]), + + ?assertMatch( + #docs_v1{ module_doc = #{ <<"en">> := <<"moduledoc">> }, + anno = 2, + docs = [{{function,main,0}, 4, _, #{ <<"en">> := <<"main">> }, _}]}, + Docs), + + check_no_doc_attributes(BeamCode), + + {ok, test, BeamCodeWSource} = compile:forms(scan_and_parse(Code),[beam_docs, debug_info, {source, "test.erl"}]), + {ok, {test, [{documentation, DocsWSource }]}} = beam_lib:chunks(BeamCodeWSource, [documentation]), + + ?assertMatch( + #docs_v1{ module_doc = #{ <<"en">> := <<"moduledoc">> }, + anno = 2, + docs = [{{function,main,0}, 4, + _, #{ <<"en">> := <<"main">> }, _}]}, + DocsWSource), + check_no_doc_attributes(BeamCodeWSource), + ok. + +scan_and_parse(Code) -> + {ok, Toks, _} = erl_scan:string(Code), + parse(Toks). + +parse([]) -> []; +parse(Toks) -> + {Form, [Dot | Rest]} = lists:splitwith(fun(E) -> element(1,E) =/= dot end, Toks), + {ok, F} = erl_parse:parse_form(Form ++ [Dot]), + [F | parse(Rest)]. + +compile_file(Conf, ModuleName, ExtraOpts) -> + ErlModName = ModuleName ++ ".erl", + Filename = filename:join(proplists:get_value(data_dir, Conf), ErlModName), + io:format("Compiling: ~ts~n~p~n",[Filename, ExtraOpts]), + case compile:file(Filename, ExtraOpts) of + Res when element(1, Res) =:= ok -> + ModName = element(2, Res), + case lists:search(fun (X) -> X =:= no_docs end, ExtraOpts) of + false when length(ExtraOpts) > 0 -> + check_no_doc_attributes(code:which(ModName)), + Res; + _ -> + Res + end; + Else -> + Else + end. + +default_compile_file(Conf, ModuleName) -> + default_compile_file(Conf, ModuleName, []). +default_compile_file(Conf, ModuleName, ExtraOpts) -> + compile_file(Conf, ModuleName, [report, return_errors, debug_info] ++ ExtraOpts). + + +%% Verify that all doc and moduledoc attributes are stripped from debug_info +check_no_doc_attributes(Mod) -> + {ok, {_ModName, + [{debug_info, + {debug_info_v1,erl_abstract_code, + {AST, Opts}}}]}} = beam_lib:chunks(Mod, [debug_info]), + false = lists:search( + fun(E) -> + element(1,E) == attribute + andalso + (element(3,E) == doc orelse element(3,E) == moduledoc) + end, AST), + false = lists:member(no_docs, Opts), + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/FUN b/lib/compiler/test/beam_doc_SUITE_data/FUN new file mode 100644 index 000000000000..ace17b0007ef --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/FUN @@ -0,0 +1,3 @@ +# Fun + +Test importing function diff --git a/lib/compiler/test/beam_doc_SUITE_data/README b/lib/compiler/test/beam_doc_SUITE_data/README new file mode 100644 index 000000000000..935d425318b4 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/README @@ -0,0 +1,3 @@ +# README + +This is a test diff --git a/lib/compiler/test/beam_doc_SUITE_data/TYPES b/lib/compiler/test/beam_doc_SUITE_data/TYPES new file mode 100644 index 000000000000..4b5f08ac2658 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/TYPES @@ -0,0 +1,3 @@ +# TYPES + +Test diff --git a/lib/compiler/test/beam_doc_SUITE_data/all_string_formats.erl b/lib/compiler/test/beam_doc_SUITE_data/all_string_formats.erl new file mode 100644 index 000000000000..c567fc046f42 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/all_string_formats.erl @@ -0,0 +1,20 @@ +-module(all_string_formats). + +-export([one/0,two/0,three/0,four/0,five/0,six/0]). + +-moduledoc """ + Moduledoc test module + """. + +-doc ~S"Doc test module". +one() -> ok. +-doc ~B"Doc test module". +two() -> ok. +-doc <<"Doc","test","modul",$e>>. +three() -> ok. +-doc <<"Doc test mödule"/utf8>>. +four() -> ok. +-doc <>. +five() -> ok. +-doc ?MODULE_STRING "-" ?MODULE_STRING. +six() -> ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/callback.erl b/lib/compiler/test/beam_doc_SUITE_data/callback.erl new file mode 100644 index 000000000000..1f0bf1aae005 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/callback.erl @@ -0,0 +1,69 @@ +-module(callback). + +%% -doc " +%% This should be ignored +%% ". +%% -behaviour(gen_server). + +-export([all_ok/0, main/0, main2/0]). + +-doc " +Callback fn that always returns ok. +". +-callback all_ok() -> ok. + +-doc " +Test changing order +". +-doc #{equiv => ok()}. +-callback change_order() -> Order :: boolean(). + +-callback param(X) -> X. +-callback ann(X :: integer()) -> Y :: integer(). + +-callback multi_no_slogan(X :: integer()) -> X :: integer(); + (X :: atom()) -> X :: atom(). + + +-doc "multi(Argument) + +A multiclause callback with slogan docs". +-callback multi(X :: integer()) -> X :: integer(); + (X :: atom()) -> X :: atom(). + +-callback bounded(X) -> integer() when X :: integer(). + +-doc hidden. +-callback warn() -> ok. + +-doc hidden. +-compile({nowarn_hidden_doc, nowarn/1}). +-callback nowarn(Arg :: atom()) -> ok. + + +-doc #{equiv => ok/0}. +-doc " +This is a test +". +all_ok() -> + all_ok(). + +-doc #{equiv => main()}. +-spec main() -> ok. +-doc " +all_ok() + +Calls all_ok/0 +". +main() -> + all_ok(). + +-doc #{equiv => main()}. +-doc " +main2() + +Second main +". +-spec main2() -> ok. +main2() -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/deprecated.erl b/lib/compiler/test/beam_doc_SUITE_data/deprecated.erl new file mode 100644 index 000000000000..a2edfec1b0d7 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/deprecated.erl @@ -0,0 +1,46 @@ +-module(deprecated). + +-export([test/0, test/1, test/2]). +-export_type([test/0, test/1]). + +-ifndef(REASON). +-define(REASON,"Deprecation reason"). +-endif. + +-ifndef(TREASON). +-define(TREASON,"Deprecation reason"). +-endif. + +-doc #{ deprecated => "Meta reason" }. +-callback test() -> ok. + +-ifdef(TEST_WILDCARD). +-deprecated({test, '_', ?REASON}). +-else. +-ifdef(ALL_WILDCARD). +-deprecated({'_', '_', ?REASON}). +-else. +-deprecated({test, 1, ?REASON}). +-endif. +-endif. +-deprecated({test, 0}). + +-ifdef(TEST_WILDCARD). +-deprecated_type({test, '_'}). +-else. +-ifdef(ALL_WILDCARD). +-deprecated_type({'_', '_', ?TREASON}). +-else. +-deprecated_type({test, 1, ?TREASON}). +-endif. +-endif. +-deprecated_type({test, 0}). +-type test() :: ok. +-type test(N) :: N. + +test() -> ok. +test(N) -> N. + +-doc #{ deprecated => "Meta reason" }. +test(N,M) -> N + M. + diff --git a/lib/compiler/test/beam_doc_SUITE_data/doc_with_file.erl b/lib/compiler/test/beam_doc_SUITE_data/doc_with_file.erl new file mode 100644 index 000000000000..ff4c0040a847 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/doc_with_file.erl @@ -0,0 +1,25 @@ +-module(doc_with_file). + +-export([main/1, main2/1]). +-export_type([foo/1]). + +-moduledoc {file, "README"}. + +-doc {file, "TYPES"}. +-type private_type_exported() :: integer(). + +-doc {file, "FUN"}. +-spec main(Var) -> foo(Var). +main(X) -> + X. + +-include("doc_with_file.hrl"). +-spec main2( I :: integer()) -> bar(I :: integer()). +main2(X) when is_atom(X) -> + X; +main2(X) -> + X. + + +-type foo(X) :: { X, private_type_exported()}. +-type bar(X) :: foo({X, private_type_exported()}). diff --git a/lib/compiler/test/beam_doc_SUITE_data/doc_with_file_error.erl b/lib/compiler/test/beam_doc_SUITE_data/doc_with_file_error.erl new file mode 100644 index 000000000000..baa7034cc6f1 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/doc_with_file_error.erl @@ -0,0 +1,24 @@ +-module(doc_with_file_error). + +-export([main/1, main2/1]). +-export_type([foo/1]). + +-moduledoc {file, "doesnotexist"}. + +-doc {file, "doesnotexist"}. +-type private_type_exported() :: integer(). + +-doc {file, "doesnotexist"}. +-spec main(Var) -> foo(Var). +main(X) -> + X. + +-doc(({file, "folder/doesnotexist"})). +-spec main2( I :: integer()) -> bar(I :: integer()). +main2(X) when is_atom(X) -> + X; +main2(X) -> + X. + +-type foo(X) :: { X, private_type_exported()}. +-type bar(X) :: foo({X, private_type_exported()}). diff --git a/lib/compiler/test/beam_doc_SUITE_data/docformat.erl b/lib/compiler/test/beam_doc_SUITE_data/docformat.erl new file mode 100644 index 000000000000..40b1bd3762c8 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/docformat.erl @@ -0,0 +1,18 @@ +-module(docformat). + +-export([main/0]). + + +-moduledoc #{since => "1.0"}. +-moduledoc #{deprecated => "Use something else"}. +-moduledoc #{format => "text/asciidoc"}. +-moduledoc " +Moduledoc test module +". + + +-doc " +Doc test module +". +main() -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/docmodule_with_doc_attributes.erl b/lib/compiler/test/beam_doc_SUITE_data/docmodule_with_doc_attributes.erl new file mode 100644 index 000000000000..7d1dbe1d4d39 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/docmodule_with_doc_attributes.erl @@ -0,0 +1,36 @@ +-module(docmodule_with_doc_attributes). + +-export([main/0, ok/0, no_docs/0, no_docs_multi/1, with_file_docs/0]). + +-moduledoc " +Moduledoc test module +". + + +-doc " +Doc test module +". +main() -> + ok(). + + +-doc #{authors => "Someone"}. +ok() -> + no_docs(). + +no_docs() -> + ok. + +-doc {file, "README"}. +with_file_docs() -> + ok. + +no_docs_multi(a) -> + a; +no_docs_multi(A) -> + private_multi(A). + +private_multi(a) -> + a; +private_multi(A) -> + A. diff --git a/lib/compiler/test/beam_doc_SUITE_data/equiv.erl b/lib/compiler/test/beam_doc_SUITE_data/equiv.erl new file mode 100644 index 000000000000..a11106635657 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/equiv.erl @@ -0,0 +1,10 @@ +-module(equiv). + +-export([main/1, main/2]). + +-doc #{ equiv => main(A, 1) }. +main(A) -> + main(A, 1). + +main(A, B) -> + {A, B}. diff --git a/lib/compiler/test/beam_doc_SUITE_data/export_all.erl b/lib/compiler/test/beam_doc_SUITE_data/export_all.erl new file mode 100644 index 000000000000..13d4e7d39c22 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/export_all.erl @@ -0,0 +1,31 @@ +-module(export_all). + +-compile(export_all). + + +-doc #{equiv => ok/0}. +-doc " +This is a test +". +all_ok() -> + all_ok(). + +-doc #{equiv => main()}. +-spec main() -> ok. +-doc " +all_ok() + +Calls all_ok/0 +". +main() -> + all_ok(). + +-doc #{equiv => main()}. +-doc " +main2() + +Second main +". +-spec main2() -> ok. +main2() -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/folder/FILE b/lib/compiler/test/beam_doc_SUITE_data/folder/FILE new file mode 100644 index 000000000000..efb71e584aba --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/folder/FILE @@ -0,0 +1,3 @@ +# File + +testing fetching docs from other folders diff --git a/lib/compiler/test/beam_doc_SUITE_data/folder/doc_with_file.hrl b/lib/compiler/test/beam_doc_SUITE_data/folder/doc_with_file.hrl new file mode 100644 index 000000000000..a9d40b48df13 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/folder/doc_with_file.hrl @@ -0,0 +1 @@ +-doc({file, "FILE"}). diff --git a/lib/compiler/test/beam_doc_SUITE_data/hide_moduledoc.erl b/lib/compiler/test/beam_doc_SUITE_data/hide_moduledoc.erl new file mode 100644 index 000000000000..2d02658e24de --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/hide_moduledoc.erl @@ -0,0 +1,15 @@ +-module(hide_moduledoc). + +-export([main/0]). + +-moduledoc false. + +-doc " +Doc test module +". +main() -> + ok(). + +-doc #{since => "1.0"}. +ok() -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/hide_moduledoc2.erl b/lib/compiler/test/beam_doc_SUITE_data/hide_moduledoc2.erl new file mode 100644 index 000000000000..12bea08d521c --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/hide_moduledoc2.erl @@ -0,0 +1,25 @@ +-module(hide_moduledoc2). + +-export([main/0, handle_call/1]). + +-moduledoc hidden. + +-doc " +Doc test module +". +-doc hidden. +main() -> + ok(). + +-doc #{since => "1.0"}. +-doc hidden. +ok() -> + ok. + +-doc false. +-spec handle_call('which' | {'add',atom()} | {'delete',atom()}) -> + {'reply', 'ok' | [atom()]}. + +handle_call({add,_Address}=A) -> A; +handle_call({delete,_Address}=D) -> D; +handle_call(which) -> which. diff --git a/lib/compiler/test/beam_doc_SUITE_data/private_types.erl b/lib/compiler/test/beam_doc_SUITE_data/private_types.erl new file mode 100644 index 000000000000..a490dc29f122 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/private_types.erl @@ -0,0 +1,65 @@ +-module(private_types). + +-export([bar/0, hidden/0, hidden_type_exposed/0, bounded/2]). +-export_type([public_t/0, hidden_export_t/0, complex/1]). + +-type private_t() :: integer(). %% In chunk because referred to by exported bar/0 +-type public_t() :: integer(). %% In chunk because exported +-type private_cb_t() :: integer(). %% In chunk because referred to by callback +-type local_t() :: integer(). %% Not in chunk because only referred by non-exported function + +-doc false. +-type hidden_export_t() :: integer(). %% In chunk because exported + +-callback bar(private_cb_t()) -> ok. + +-spec bar() -> private_t(). +bar() -> baz(). + +-spec baz() -> local_t(). +baz() -> 1. + +-type hidden_t() :: integer(). %% Not in chunk because only referred to by hidden function + +-doc false. +-spec hidden() -> hidden_t(). +hidden() -> 1. + +-doc false. +-type private() :: integer(). + +-spec hidden_type_exposed() -> private(). +hidden_type_exposed() -> 1. + +-type bounded_arg_t() :: integer(). +-type arg_t() :: integer(). +-type bounded_ret_t() :: integer(). +-spec bounded(A :: arg_t(), B) -> C + when B :: bounded_arg_t(), + C :: bounded_ret_t(). +bounded(A, B) -> A + B. + +-record(r,{ a :: record_a_t(), f :: record_f_t(), rec :: #r{} }). %% We have a recusive type to make sure we handle that +-type complex(A) :: + [fun((fun_t()) -> fun_ret_t()) | + fun((...) -> fun_ret_2_t()) | + #{ map_key_t() := map_value_t(), + map_key_2_t() => map_value_2_t() } | + #r{ f :: record_inline_t() } | + {tuple_t()} | + maps:iterator_order(remote_type_t(A)) | + [] | 1 .. 2 + ]. + +-type fun_t() :: integer(). +-type fun_ret_t() :: integer(). +-type fun_ret_2_t() :: integer(). +-type map_key_t() :: integer(). +-type map_value_t() :: integer(). +-type map_key_2_t() :: integer(). +-type map_value_2_t() :: integer(). +-type record_inline_t() :: integer(). +-type record_a_t() :: integer(). +-type record_f_t() :: integer(). %% Should not be included as #r{ f } overrides it +-type tuple_t() :: integer(). +-type remote_type_t(A) :: A. diff --git a/lib/compiler/test/beam_doc_SUITE_data/singleton_docformat.erl b/lib/compiler/test/beam_doc_SUITE_data/singleton_docformat.erl new file mode 100644 index 000000000000..7aab51384457 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/singleton_docformat.erl @@ -0,0 +1,21 @@ +-module(singleton_docformat). + +-export([main/0]). + +-moduledoc #{format => <<"text/asciidoc">>, + since => "1.0", + deprecated => "Use something else"}. +-moduledoc " +Moduledoc test module +". + + +-doc #{ authors => [<<"Beep Bop">>] }. +-doc #{ equiv => main/3 }. +-doc " +Doc test module + +More info here +". +main() -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/singleton_meta.erl b/lib/compiler/test/beam_doc_SUITE_data/singleton_meta.erl new file mode 100644 index 000000000000..aa4bb6fb3057 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/singleton_meta.erl @@ -0,0 +1,17 @@ +-module(singleton_meta). + +-export([main/0, main1/0]). + +-doc #{ authors => [<<"Beep Bop">>] }. +-doc #{ equiv => main/3 }. +main() -> + main1(). + +-doc (#{ equiv => main(_) }). +-doc " +main1() + +Returns always ok. +". +main1() -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/singletondoc.erl b/lib/compiler/test/beam_doc_SUITE_data/singletondoc.erl new file mode 100644 index 000000000000..ed5b349a9d50 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/singletondoc.erl @@ -0,0 +1,19 @@ +-module(singletondoc). + +-export([main/0, foo/1]). + +-doc " +Doc test module +". +main() -> + ok. + +-doc " +foo(ok) + +Tests multi-clauses +". +foo(X) when is_atom(X) -> + X; +foo(_) -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/singletonmoduledoc.erl b/lib/compiler/test/beam_doc_SUITE_data/singletonmoduledoc.erl new file mode 100644 index 000000000000..cd81012d08f4 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/singletonmoduledoc.erl @@ -0,0 +1,7 @@ +-module(singletonmoduledoc). + +-export([]). + +-moduledoc " +Moduledoc test module +". diff --git a/lib/compiler/test/beam_doc_SUITE_data/skip_doc.erl b/lib/compiler/test/beam_doc_SUITE_data/skip_doc.erl new file mode 100644 index 000000000000..afb0323104ce --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/skip_doc.erl @@ -0,0 +1,19 @@ +-module(skip_doc). + +-export([main/0, foo/1]). + +-doc " +Doc test module +". +main() -> + ok. + +-doc " +foo(ok) + +Tests multi-clauses +". +foo(X) when is_atom(X) -> + X; +foo(_) -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/slogan.erl b/lib/compiler/test/beam_doc_SUITE_data/slogan.erl new file mode 100644 index 000000000000..45f5aca908eb --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/slogan.erl @@ -0,0 +1,73 @@ +-module(slogan). + +-export([main/1, + bar/0, + no_slogan/1, + spec_slogan/1, + spec_slogan/2, + no_doc_slogan/1, + spec_no_doc_slogan/1, + spec_multiclause_slogan_ignored/1, + connect/2 + ]). + +-doc " +main(Foo) + +Returns ok. +". +-spec main(X :: integer()) -> ok. +main(_X) -> + ok. + +-doc " +foo() +Not a slogan since foo =/= bar +". +bar() -> + ok. + +-doc " +Not a slogan + +Tests slogans in multi-clause +". +-spec no_slogan(atom()) -> atom(); + (term()) -> ok. +no_slogan(X) when is_atom(X) -> + X; +no_slogan(_X) -> + ok. + +-spec spec_slogan(Y :: integer()) -> integer() | ok. +-doc "Not a slogan". +spec_slogan(_X) -> ok. + +-spec spec_slogan(Y :: integer(), Z :: integer()) -> integer() | ok. +-doc "Not a slogan". +spec_slogan(_X, _Y) -> _X + _Y. + +no_doc_slogan(X) -> X. + +-spec spec_no_doc_slogan(Y) -> Y. +spec_no_doc_slogan(X) -> + X. + + +-spec spec_multiclause_slogan_ignored(Y) -> Y; + (Z) -> Z when Z :: integer(). +spec_multiclause_slogan_ignored(X) -> + X. + + +-doc(#{equiv => connect/3}). +-doc(#{since => <<"OTP R14B">>}). +-spec connect(TCPSocket, TLSOptions) -> + {ok, sslsocket} | + {error, reason} | + {option_not_a_key_value_tuple, any()} when + TCPSocket :: socket, + TLSOptions :: [tls_client_option]. + +connect(Socket, SslOptions) -> + {Socket, SslOptions}. diff --git a/lib/compiler/test/beam_doc_SUITE_data/spec.erl b/lib/compiler/test/beam_doc_SUITE_data/spec.erl new file mode 100644 index 000000000000..df0331b1ce07 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/spec.erl @@ -0,0 +1,24 @@ +-module(spec). + +-type yes() :: integer(). +-type no() :: atom(). + +-export([foo/1, baz/1]). + +-record(name, {field = undefined :: atom()}). + +-callback me(X :: yes()) -> no(); + (no()) -> yes(); + (term()) -> #name{ }. + +-spec spec:foo(yes()) -> {yes(), yes()} | yes(); + (no()) -> no(). +foo(X) -> + _ = #name{field = none}, + X. + + +-spec baz(Z) -> Z when Z :: yes(); + (no()) -> no(). +baz(X) -> + X. diff --git a/lib/compiler/test/beam_doc_SUITE_data/spec_switch_order.erl b/lib/compiler/test/beam_doc_SUITE_data/spec_switch_order.erl new file mode 100644 index 000000000000..9aa926247401 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/spec_switch_order.erl @@ -0,0 +1,54 @@ +-module(spec_switch_order). + +-export([foo/1, bar/1, other/0, not_false/0]). + +-doc hidden. +-spec foo(integer()) -> mytype(). + + + +-doc " +bar(Var) +". +-spec bar(integer()) -> another_type(). + + + + +-type mytype() :: ok. +-type another_type() :: ok. + + + +-doc " +foo(Var) + +Foo does X +". +foo(_X) -> + ok. + +-doc hidden. +bar(_X) -> + ok. + + +%% Ordering issue +-doc false. +-spec other() -> ok. +%% docs #{ {other, 0} => {hidden, none, #{}} +%% need to reset fields + +-spec not_false() -> ok. +%% create entry with current fields +%% reset state + +-doc #{}. +other() -> + ok. +%% fetch or create entry with for other +%% update unset fields +%% we need to differenciate between unset and set with default + +not_false() -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/types_and_opaques.erl b/lib/compiler/test/beam_doc_SUITE_data/types_and_opaques.erl new file mode 100644 index 000000000000..4512f66a4dab --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/types_and_opaques.erl @@ -0,0 +1,147 @@ +-module(types_and_opaques). + +-export([foo/0, private_encoding_func/2,map_fun/0,ignore_type_from_hidden_fun/0]). + +-export_type([name/1,unnamed/0, mmaybe/1, callback_mode_result/0]). + +-export([uses_public/0]). +-export_type([public/0]). + +-include("types_and_opaques.hrl"). + +-doc " +name(_) + +Represents the name of a person. +". +-type name(_Ignored) :: string(). + +-doc #{since => "1.0"}. +-doc #{equiv => non_neg_integer/0}. +-type natural_number() :: non_neg_integer(). + +-doc " +Tests generics +". +-doc #{equiv => madeup()}. +-type param(X) :: {X, integer(), Y :: string()}. + +-doc #{equiv => non_neg_integer()}. +-doc " +unnamed() + +Represents the name of a person that cannot be named. +". +-opaque unnamed() :: name(integer()). + + + +-export_type([natural_number/0, param/1]). + + + +-doc #{ authors => "Someone else" }. +-doc " +mmaybe(X) ::= nothing | X. + +Represents a maybe type. +". +-opaque mmaybe(X) :: nothing | X. + +-opaque non_exported() :: atom(). + +-type not_exported_either() :: atom(). + +-doc hidden. +-doc #{ authors => "Someone else" }. +-type hidden_false() :: atom(). + +-doc false. +-doc " +Here is ok. +". +-type hidden() :: hidden_false(). + + + +-export_type([hidden_false/0, hidden/0]). + + + +-type one() :: 1. +-type two() :: one(). +-type three() :: two(). +-type four() :: three(). + +-spec foo() -> three(). +foo() -> 1. + + +-type encoding_func() :: fun((non_neg_integer()) -> boolean()). + +-spec private_encoding_func(Data, Options) -> AbsTerm when + Data :: term(), + Options :: Location | [Option], + Option :: {encoding, Encoding} + | {line, Line} + | {location, Location}, + Encoding :: 'latin1' | 'unicode' | 'utf8' | 'none' | encoding_func(), + Line :: erl_anno:line(), + Location :: erl_anno:location(), + AbsTerm :: term(). +private_encoding_func(_, _) -> + ok. + + +-type callback_mode_result() :: + callback_mode() | [callback_mode() | state_enter()]. +-type callback_mode() :: 'state_functions' | 'handle_event_function'. +-type state_enter() :: 'state_enter'. + + +-type mymap() :: #{ foo => my_private_type(), + bar := my_other_private_type()}. + +-type my_private_type() :: integer(). +-type my_other_private_type() :: non_neg_integer(). + +-spec map_fun() -> mymap(). +map_fun() -> + ok. + + +-doc false. +-spec ignore_type_from_hidden_fun() -> four(). +ignore_type_from_hidden_fun() -> + ok. + +%% Type below should be a warning, since it is refered +%% by a public function or type and the inner type is hidden. +-doc false. +-type hidden_type() :: integer(). +%% Test suppression of hidden type warning. +-doc false. +-type hidden_nowarn_type() :: integer(). +-compile({nowarn_hidden_doc, [hidden_nowarn_type/0]}). + +-type intermediate() :: hidden_type() | hidden_included_type() | hidden_nowarn_type(). +-type public() :: intermediate(). + +-spec uses_public() -> public(). +uses_public() -> + qux(). + +-doc false. +-doc " +Hidden function with doc attribute +". +qux() -> + qux2(). + + +-doc " +Hidden function with doc attribute +". +-doc false. +qux2() -> + ok. diff --git a/lib/compiler/test/beam_doc_SUITE_data/types_and_opaques.hrl b/lib/compiler/test/beam_doc_SUITE_data/types_and_opaques.hrl new file mode 100644 index 000000000000..eda452edab72 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/types_and_opaques.hrl @@ -0,0 +1,2 @@ +-doc false. +-type hidden_included_type() :: integer(). diff --git a/lib/compiler/test/beam_doc_SUITE_data/user_defined_type.erl b/lib/compiler/test/beam_doc_SUITE_data/user_defined_type.erl new file mode 100644 index 000000000000..6d5b745b39f4 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/user_defined_type.erl @@ -0,0 +1,3 @@ +-module(user_defined_type). + +-include("user_defined_type.hrl"). diff --git a/lib/compiler/test/beam_doc_SUITE_data/user_defined_type.hrl b/lib/compiler/test/beam_doc_SUITE_data/user_defined_type.hrl new file mode 100644 index 000000000000..63356724c9e2 --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/user_defined_type.hrl @@ -0,0 +1,2 @@ +-type foo() :: integer(). +-type foo_dependent() :: foo(). diff --git a/lib/compiler/test/beam_doc_SUITE_data/warn_missing_doc.erl b/lib/compiler/test/beam_doc_SUITE_data/warn_missing_doc.erl new file mode 100644 index 000000000000..d2b6c8f38f0c --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/warn_missing_doc.erl @@ -0,0 +1,14 @@ +-module(warn_missing_doc). + +-export([test/0, test/1, test/2]). +-export_type([test/0, test/1]). + +-type test() :: ok. +-type test(N) :: N. + +-callback test() -> ok. + +-include("warn_missing_doc.hrl"). + +test() -> ok. +test(N) -> N. diff --git a/lib/compiler/test/beam_doc_SUITE_data/warn_missing_doc.hrl b/lib/compiler/test/beam_doc_SUITE_data/warn_missing_doc.hrl new file mode 100644 index 000000000000..5b702b90786f --- /dev/null +++ b/lib/compiler/test/beam_doc_SUITE_data/warn_missing_doc.hrl @@ -0,0 +1,2 @@ +-doc #{ }. +test(N,M) -> N + M. diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl index 2c6f260618e3..8093b731c325 100644 --- a/lib/compiler/test/compile_SUITE.erl +++ b/lib/compiler/test/compile_SUITE.erl @@ -408,15 +408,22 @@ makedep(Config) when is_list(Config) -> %% Generate dependencies and compile normally at the same time. GeneratedHrl = filename:join(PrivDir, "generated.hrl"), - ok = file:write_file(GeneratedHrl, ""), - {ok,simple} = compile:file(Simple, [report,makedep_side_effect, - {makedep_output,Target}, - {i,PrivDir}|IncludeOptions]), - {ok,Mf9} = file:read_file(Target), - BasicMf3 = iolist_to_binary([string:trim(BasicMf2), " ", filename:join(PrivDir, "generated.hrl"), "\n"]), - BasicMf3 = makedep_canonicalize_result(Mf9, DataDir), - error = compile:file(Simple, [report,makedep_side_effect, - {makedep_output,PrivDir}|IncludeOptions]), + GeneratedDoc = filename:join(proplists:get_value(data_dir, Config), "foo.md"), + try + ok = file:write_file(GeneratedHrl, ""), + ok = file:write_file(GeneratedDoc, ""), + {ok,simple} = compile:file(Simple, [report,makedep_side_effect, + {makedep_output,Target}, + {i,PrivDir}|IncludeOptions]), + {ok,Mf9} = file:read_file(Target), + BasicMf3 = iolist_to_binary([string:trim(BasicMf2), " $(srcdir)/foo.md ", filename:join(PrivDir, "generated.hrl"), "\n"]), + BasicMf3 = makedep_canonicalize_result(Mf9, DataDir), + error = compile:file(Simple, [report,makedep_side_effect, + {makedep_output,PrivDir}|IncludeOptions]) + after + ok = file:delete(GeneratedHrl), + ok = file:delete(GeneratedDoc) + end, %% Cover generation of long lines that must be split. CompileModule = filename:join(code:lib_dir(compiler), "src/compile.erl"), @@ -432,7 +439,6 @@ makedep(Config) when is_list(Config) -> error = compile:file(Simple, [report,makedep,{makedep_output,a_bad_output_device}]), ok = file:delete(Target), - ok = file:delete(GeneratedHrl), ok = file:del_dir(filename:dirname(Target)), ok. @@ -707,7 +713,6 @@ encrypted_abstr_1(Simple, Target) -> erpc:call( Node, fun() -> - {ok,OldCwd} = file:get_cwd(), ok = file:set_cwd(TargetDir), error = compile:file(Simple, [encrypt_debug_info,report]), diff --git a/lib/compiler/test/compile_SUITE_data/simple-basic1.mk b/lib/compiler/test/compile_SUITE_data/simple-basic1.mk index 4073fa82d01e..53bec35f9667 100644 --- a/lib/compiler/test/compile_SUITE_data/simple-basic1.mk +++ b/lib/compiler/test/compile_SUITE_data/simple-basic1.mk @@ -1 +1 @@ -simple.beam: $(srcdir)/simple.erl +simple.beam: $(srcdir)/simple.erl $(srcdir)/unicode-0.md diff --git a/lib/compiler/test/compile_SUITE_data/simple-basic2.mk b/lib/compiler/test/compile_SUITE_data/simple-basic2.mk index 761d1d9582b2..98406b8083e9 100644 --- a/lib/compiler/test/compile_SUITE_data/simple-basic2.mk +++ b/lib/compiler/test/compile_SUITE_data/simple-basic2.mk @@ -1 +1 @@ -simple.beam: $(srcdir)/simple.erl $(srcdir)/include/simple.hrl +simple.beam: $(srcdir)/simple.erl $(srcdir)/unicode-0.md $(srcdir)/include/simple.hrl diff --git a/lib/compiler/test/compile_SUITE_data/simple-missing.mk b/lib/compiler/test/compile_SUITE_data/simple-missing.mk index b13d44ec368f..38fccfd82e6e 100644 --- a/lib/compiler/test/compile_SUITE_data/simple-missing.mk +++ b/lib/compiler/test/compile_SUITE_data/simple-missing.mk @@ -1 +1 @@ -simple.beam: $(srcdir)/simple.erl $(srcdir)/include/simple.hrl generated.hrl +simple.beam: $(srcdir)/simple.erl $(srcdir)/unicode-0.md $(srcdir)/include/simple.hrl generated.hrl diff --git a/lib/compiler/test/compile_SUITE_data/simple-phony.mk b/lib/compiler/test/compile_SUITE_data/simple-phony.mk index c84bcedd2abb..fb049c1db79f 100644 --- a/lib/compiler/test/compile_SUITE_data/simple-phony.mk +++ b/lib/compiler/test/compile_SUITE_data/simple-phony.mk @@ -1,3 +1,5 @@ -simple.beam: $(srcdir)/simple.erl $(srcdir)/include/simple.hrl +simple.beam: $(srcdir)/simple.erl $(srcdir)/unicode-0.md $(srcdir)/include/simple.hrl + +$(srcdir)/unicode-0.md: $(srcdir)/include/simple.hrl: diff --git a/lib/compiler/test/compile_SUITE_data/simple-target1.mk b/lib/compiler/test/compile_SUITE_data/simple-target1.mk index dd9fa0d6e553..8b31c4c6962b 100644 --- a/lib/compiler/test/compile_SUITE_data/simple-target1.mk +++ b/lib/compiler/test/compile_SUITE_data/simple-target1.mk @@ -1 +1 @@ -$target: $(srcdir)/simple.erl $(srcdir)/include/simple.hrl +$target: $(srcdir)/simple.erl $(srcdir)/unicode-0.md $(srcdir)/include/simple.hrl diff --git a/lib/compiler/test/compile_SUITE_data/simple-target2.mk b/lib/compiler/test/compile_SUITE_data/simple-target2.mk index a5fc6f461d1a..f41b9a066cd0 100644 --- a/lib/compiler/test/compile_SUITE_data/simple-target2.mk +++ b/lib/compiler/test/compile_SUITE_data/simple-target2.mk @@ -1 +1 @@ -$$target: $(srcdir)/simple.erl $(srcdir)/include/simple.hrl +$$target: $(srcdir)/simple.erl $(srcdir)/unicode-0.md $(srcdir)/include/simple.hrl diff --git a/lib/compiler/test/compile_SUITE_data/simple.erl b/lib/compiler/test/compile_SUITE_data/simple.erl index 9385d101e0d3..5129e6e2048d 100644 --- a/lib/compiler/test/compile_SUITE_data/simple.erl +++ b/lib/compiler/test/compile_SUITE_data/simple.erl @@ -28,6 +28,7 @@ test() -> passed. +-doc {file, "unicode-0.md"}. unicode() -> {"это",'спутник'}. @@ -37,6 +38,9 @@ unicode() -> -ifdef(need_foo). -include("simple.hrl"). +-ifdef(include_generated). +-doc {file, "foo.md"}. +-endif. foo() -> {?included_value, ?foo_value}. diff --git a/lib/compiler/test/compile_SUITE_data/unicode-0.md b/lib/compiler/test/compile_SUITE_data/unicode-0.md new file mode 100644 index 000000000000..b95d9f74a18e --- /dev/null +++ b/lib/compiler/test/compile_SUITE_data/unicode-0.md @@ -0,0 +1 @@ +Small test docs diff --git a/lib/erl_docgen/priv/bin/validate_links.escript b/lib/erl_docgen/priv/bin/validate_links.escript index d1bccfa3fc2d..0ea9b3730c58 100755 --- a/lib/erl_docgen/priv/bin/validate_links.escript +++ b/lib/erl_docgen/priv/bin/validate_links.escript @@ -210,13 +210,12 @@ parse_mod2app(Filename) -> validate_links({Filename, Links}, CachedFiles) -> %% io:format("~s ~p~n",[Links]), - lists:foreach( - fun({LinkType, TypeLinks}) -> - lists:foreach( - fun({Line,Link}) -> - validate_link(Filename, LinkType, Line, Link, CachedFiles) - end, TypeLinks) - end, maps:to_list(maps:filter(fun(Key,_) -> not is_atom(Key) end,Links))). + maps:foreach(fun(LinkType, TypeLinks) when not is_atom(LinkType) -> + lists:foreach(fun({Line,Link}) -> + validate_link(Filename, LinkType, Line, Link, CachedFiles) + end, TypeLinks); + (_, _) -> ok + end, Links). validate_link(Filename, LinkType, Line, [{"marker",Marker}], CachedFiles) -> validate_link(Filename, LinkType, Line, Marker, CachedFiles); validate_link(Filename, "seemfa", Line, Link, CachedFiles) -> diff --git a/lib/stdlib/doc/src/beam_lib.xml b/lib/stdlib/doc/src/beam_lib.xml index e743741ea89a..0d2a6586cf75 100644 --- a/lib/stdlib/doc/src/beam_lib.xml +++ b/lib/stdlib/doc/src/beam_lib.xml @@ -52,6 +52,7 @@ labeled_exports ("ExpT") labeled_locals ("LocT") locals ("LocT") + documentation ("Docs") @@ -200,7 +201,7 @@ io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]). -

"Attr" | "CInf" | "Dbgi" | "ExpT" | "ImpT" | "LocT" | "AtU8"

+

"Attr" | "CInf" | "Dbgi" | "ExpT" | "ImpT" | "LocT" | "AtU8" | "Docs"

@@ -236,6 +237,15 @@ io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]). is automatically computed from the debug_info chunk.

+ + + +

+ + EEP-48 documentation format +

+
+
diff --git a/lib/stdlib/src/beam_lib.erl b/lib/stdlib/src/beam_lib.erl index 31be2776433d..8ee2a737c731 100644 --- a/lib/stdlib/src/beam_lib.erl +++ b/lib/stdlib/src/beam_lib.erl @@ -20,6 +20,8 @@ -module(beam_lib). -behaviour(gen_server). +-include_lib("kernel/include/eep48.hrl"). + %% Avoid warning for local function error/1 clashing with autoimported BIF. -compile({no_auto_import,[error/1]}). %% Avoid warning for local function error/2 clashing with autoimported BIF. @@ -71,19 +73,21 @@ -type label() :: integer(). -type chunkid() :: nonempty_string(). % approximation of the strings below -%% "Abst" | "Dbgi" | "Attr" | "CInf" | "ExpT" | "ImpT" | "LocT" | "Atom" | "AtU8". +%% "Abst" | "Dbgi" | "Attr" | "CInf" | "ExpT" | "ImpT" | "LocT" | "Atom" | "AtU8" | "Docs" -type chunkname() :: 'abstract_code' | 'debug_info' | 'attributes' | 'compile_info' | 'exports' | 'labeled_exports' | 'imports' | 'indexed_imports' | 'locals' | 'labeled_locals' - | 'atoms'. + | 'atoms' | 'documentation'. -type chunkref() :: chunkname() | chunkid(). -type attrib_entry() :: {Attribute :: atom(), [AttributeValue :: term()]}. -type compinfo_entry() :: {InfoKey :: atom(), term()}. -type labeled_entry() :: {Function :: atom(), arity(), label()}. +-type docs() :: #docs_v1{}. + -type chunkdata() :: {chunkid(), dataB()} | {'abstract_code', abst_code()} | {'debug_info', debug_info()} @@ -95,7 +99,8 @@ | {'indexed_imports', [{index(), module(), Function :: atom(), arity()}]} | {'locals', [{atom(), arity()}]} | {'labeled_locals', [labeled_entry()]} - | {'atoms', [{integer(), atom()}]}. + | {'atoms', [{integer(), atom()}]} + | {'documentation', docs()}. %% Error reasons -type info_rsn() :: {'chunk_too_big', file:filename(), @@ -744,6 +749,18 @@ chunk_to_data(debug_info=Id, Chunk, File, _Cs, AtomTable, Mod) -> {AtomTable, {Id, anno_from_term(Term)}} end end; +chunk_to_data(documentation=Id, Chunk, File, _Cs, AtomTable, _Mod) -> + try + case binary_to_term(Chunk) of + #docs_v1{} = Term -> + {AtomTable, {Id, Term}}; + _ -> + error({invalid_chunk, File, chunk_name_to_id(Id, File)}) + end + catch + error:badarg -> + error({invalid_chunk, File, chunk_name_to_id(Id, File)}) + end; chunk_to_data(abstract_code=Id, Chunk, File, _Cs, AtomTable, Mod) -> %% Before Erlang/OTP 20.0. case Chunk of @@ -793,6 +810,7 @@ chunk_name_to_id(attributes, _) -> "Attr"; chunk_name_to_id(abstract_code, _) -> "Abst"; chunk_name_to_id(debug_info, _) -> "Dbgi"; chunk_name_to_id(compile_info, _) -> "CInf"; +chunk_name_to_id(documentation, _) -> "Docs"; chunk_name_to_id(Other, File) -> error({unknown_chunk, File, Other}). diff --git a/lib/stdlib/src/epp.erl b/lib/stdlib/src/epp.erl index 2b531c886962..826a763893c2 100644 --- a/lib/stdlib/src/epp.erl +++ b/lib/stdlib/src/epp.erl @@ -27,9 +27,12 @@ -export([default_encoding/0, encoding_to_string/1, read_encoding_from_binary/1, read_encoding_from_binary/2, set_encoding/1, set_encoding/2, read_encoding/1, read_encoding/2]). + -export([interpret_file_attribute/1]). -export([normalize_typed_record_fields/1,restore_typed_record_fields/1]). +-include_lib("kernel/include/file.hrl"). + %%------------------------------------------------------------------------ -export_type([source_encoding/0]). @@ -234,6 +237,10 @@ format_error({circular,M,A}) -> io_lib:format("circular macro '~ts/~p'", [M,A]); format_error({include,W,F}) -> io_lib:format("can't find include ~s \"~ts\"", [W,F]); +format_error({Tag, invalid, Alternative}) when Tag =:= moduledoc; Tag =:= doc -> + io_lib:format("invalid ~s tag, only ~s allowed", [Tag, Alternative]); +format_error({Tag, W, Filename}) when Tag =:= moduledoc; Tag =:= doc -> + io_lib:format("can't find ~s ~s \"~ts\"", [Tag, W, Filename]); format_error({illegal,How,What}) -> io_lib:format("~s '-~s'", [How,What]); format_error({illegal_function,Macro}) -> @@ -932,6 +939,12 @@ scan_toks([{'-',_Lh},{atom,_Ld,warning}=Warn|Toks], From, St) -> scan_err_warn(Toks, Warn, From, leave_prefix(St)); scan_toks([{'-',_Lh},{atom,_Li,include}=Inc|Toks], From, St) -> scan_include(Toks, Inc, From, St); +scan_toks([{'-',_Lh},{atom,_Ld,D}=Doc | [{'(', _},{'{',_} | _] = Toks], From, St) + when D =:= doc; D =:= moduledoc -> + scan_filedoc(coalesce_strings(Toks), Doc, From, St); +scan_toks([{'-',_Lh},{atom,_Ld,D}=Doc | [{'{',_} | _] = Toks], From, St) + when D =:= doc; D =:= moduledoc -> + scan_filedoc(coalesce_strings(Toks), Doc, From, St); scan_toks([{'-',_Lh},{atom,_Li,include_lib}=IncLib|Toks], From, St) -> scan_include_lib(Toks, IncLib, From, St); scan_toks([{'-',_Lh},{atom,_Li,ifdef}=IfDef|Toks], From, St) -> @@ -978,14 +991,73 @@ scan_toks(Toks0, From, St) -> wait_req_scan(St) end. +%% First we parse either ({file, "filename"}) or {file, "filename"} and +%% return proper errors if syntax is incorrect. Only literal strings are allowed. +scan_filedoc([{'(', _},{'{',_}, {atom, _,file}, + {',', _}, {string, _, _} = DocFilename, + {'}', _},{')',_},{dot,_} = Dot], DocType, From, St) -> + scan_filedoc_content(DocFilename, Dot, DocType, From, St); +scan_filedoc([{'(', _},{'{',_}, {atom, _,file} | _] = Toks, DocType, From, St) -> + T = find_mismatch(['(','{',atom,',',string,'}',')',dot], Toks, DocType), + epp_reply(From, {error,{loc(T),epp,{bad,DocType}}}), + wait_req_scan(St); +scan_filedoc([{'(', _},{'{',_}, T | _], DocType, From, St) -> + epp_reply(From, {error,{loc(T),epp,{DocType, invalid, file}}}), + wait_req_scan(St); +scan_filedoc([{'{',_}, {atom, _,file}, + {',', _}, {string, _, _} = DocFilename, + {'}', _},{dot,_} = Dot], DocType, From, St) -> + scan_filedoc_content(DocFilename, Dot, DocType, From, St); +scan_filedoc([{'{',_}, {atom, _,file} | _] = Toks, {atom,_,DocType}, From, St) -> + T = find_mismatch(['{',{atom, file},',',string,'}',dot], Toks, DocType), + epp_reply(From, {error,{loc(T),epp,{bad,DocType}}}), + wait_req_scan(St); +scan_filedoc([{'{',_}, T | _], {atom,_,DocType}, From, St) -> + epp_reply(From, {error,{loc(T),epp,{DocType, invalid, file}}}), + wait_req_scan(St). + +%% Reads the content of the file and rewrites the AST as if +%% the content had been written in-place. +scan_filedoc_content({string, _A, DocFilename}, Dot, + {atom,DocLoc,Doc}, From, #epp{name = CurrentFilename} = St) -> + %% The head of the path is the dir where the current file is + Cwd = hd(St#epp.path), + case file:path_open([Cwd], DocFilename, [read, binary]) of + {ok, NewF, Pname} -> + case file:read_file_info(NewF) of + {ok, #file_info{ size = Sz }} -> + {ok, Bin} = file:read(NewF, Sz), + ok = file:close(NewF), + StartLoc = start_loc(St#epp.location), + %% Enter a new file for this doc entry + enter_file_reply(From, Pname, erl_anno:new(StartLoc), StartLoc, + code, St#epp.deterministic), + epp_reply(From, {ok, + [{'-',StartLoc}, {atom, StartLoc, Doc}] + ++ [{string, StartLoc, unicode:characters_to_list(Bin)}, {dot,StartLoc}]}), + %% Restore the previous file + enter_file_reply(From, CurrentFilename, + erl_anno:new(loc(Dot)), loc(Dot), code, + St#epp.deterministic), + wait_req_scan(St); + {error, _} -> + ok = file:close(NewF), + epp_reply(From, {error,{DocLoc,epp,{Doc, file, DocFilename}}}), + wait_req_scan(St) + end; + {error, _} -> + epp_reply(From, {error,{DocLoc,epp,{Doc, file, DocFilename}}}), + wait_req_scan(St) + end. + %% Determine whether we have passed the prefix where a -feature %% directive is allowed. in_prefix({atom, _, Atom}) -> %% These directives are allowed inside the prefix lists:member(Atom, ['module', 'feature', 'if', 'else', 'elif', 'endif', 'ifdef', 'ifndef', - 'define', 'undef', - 'include', 'include_lib']); + 'define', 'undef', 'include', 'include_lib', + 'moduledoc', 'doc']); in_prefix(_T) -> false. @@ -1937,6 +2009,8 @@ find_mismatch([var_or_atom|Tags], [{var,_A,_V}=T|Ts], _T0) -> find_mismatch(Tags, Ts, T); find_mismatch([var_or_atom|Tags], [{atom,_A,_N}=T|Ts], _T0) -> find_mismatch(Tags, Ts, T); +find_mismatch([{Tag,Value}|Tags], [{Tag,_A,Value}=T|Ts], _T0) -> + find_mismatch(Tags, Ts, T); find_mismatch(_, Ts, T0) -> no_match(Ts, T0). diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl index 766aade3a025..4c57859c742c 100644 --- a/lib/stdlib/src/erl_lint.erl +++ b/lib/stdlib/src/erl_lint.erl @@ -174,7 +174,9 @@ value_option(Flag, Default, On, OnVal, Off, OffVal, Opts) -> bvt = none :: 'none' | [any()], %Variables in binary pattern gexpr_context = guard %Context of guard expression :: gexpr_context(), - load_nif=false :: boolean() %true if calls erlang:load_nif/2 + load_nif=false :: boolean(), %true if calls erlang:load_nif/2 + doc_defined = {false, none} :: {boolean(), term()}, + moduledoc_defined = {false, none} :: {boolean(), term()} }). -type lint_state() :: #lint{}. @@ -250,6 +252,8 @@ format_error(multiple_on_loads) -> "more than one on_load attribute"; format_error({bad_on_load_arity,{F,A}}) -> io_lib:format("function ~tw/~w has wrong arity (must be 0)", [F,A]); +format_error({Tag, duplicate_doc_attribute, Ann}) -> + io_lib:format("redefining documentation attribute (~p) previously set at line ~p", [Tag, Ann]); format_error({undefined_on_load,{F,A}}) -> io_lib:format("function ~tw/~w undefined", [F,A]); format_error(nif_inline) -> @@ -889,23 +893,73 @@ attribute_state({attribute,Aa,behaviour,Behaviour}, St) -> St#lint{behaviour=St#lint.behaviour ++ [{Aa,Behaviour}]}; attribute_state({attribute,Aa,behavior,Behaviour}, St) -> St#lint{behaviour=St#lint.behaviour ++ [{Aa,Behaviour}]}; -attribute_state({attribute,A,type,{TypeName,TypeDef,Args}}, St) -> - type_def(type, A, TypeName, TypeDef, Args, St); -attribute_state({attribute,A,opaque,{TypeName,TypeDef,Args}}, St) -> - type_def(opaque, A, TypeName, TypeDef, Args, St); +attribute_state({attribute,A,type,{TypeName,TypeDef,Args}}=AST, St) -> + St1 = untrack_doc(AST, St), + type_def(type, A, TypeName, TypeDef, Args, St1); +attribute_state({attribute,A,opaque,{TypeName,TypeDef,Args}}=AST, St) -> + St1 = untrack_doc(AST, St), + type_def(opaque, A, TypeName, TypeDef, Args, St1); attribute_state({attribute,A,spec,{Fun,Types}}, St) -> spec_decl(A, Fun, Types, St); -attribute_state({attribute,A,callback,{Fun,Types}}, St) -> - callback_decl(A, Fun, Types, St); +attribute_state({attribute,A,callback,{Fun,Types}}=AST, St) -> + St1 =untrack_doc(AST, St), + callback_decl(A, Fun, Types, St1); attribute_state({attribute,A,optional_callbacks,Es}, St) -> optional_callbacks(A, Es, St); attribute_state({attribute,A,on_load,Val}, St) -> on_load(A, Val, St); +attribute_state({attribute, _A, DocAttr, Doc}=AST, St) + when is_list(Doc) andalso (DocAttr =:= moduledoc orelse DocAttr =:= doc) -> + track_doc(AST, St); attribute_state({attribute,_A,_Other,_Val}, St) -> % Ignore others St; attribute_state(Form, St) -> function_state(Form, St#lint{state=function}). + +%% -doc " +%% Tracks whether we have read a documentation attribute string multiple times. +%% Terminal elements that reset the state of the documentation attribute tracking +%% are: + +%% - function, +%% - opaque, +%% - type +%% - callback + +%% These terminal elements are also the only ones where one should place +%% documentation attributes. +%% ". +track_doc({attribute, A, Tag, Doc}=_AST, #lint{}=St) + when is_list(Doc) andalso (Tag =:= moduledoc orelse Tag =:= doc) -> + case get_doc_attr(Tag, St) of + {true, Ann} -> add_error(A, {Tag, duplicate_doc_attribute, erl_anno:line(Ann)}, St); + {false, _} -> update_doc_attr(Tag, A, St) + end; +track_doc(_AST, St) -> + St. + +%% +%% Helper functions to track documentation attributes +%% +get_doc_attr(moduledoc, #lint{moduledoc_defined = Moduledoc}) -> Moduledoc; +get_doc_attr(doc, #lint{doc_defined = Doc}) -> Doc. + +update_doc_attr(moduledoc, A, #lint{}=St) -> + St#lint{moduledoc_defined = {true, A}}; +update_doc_attr(doc, A, #lint{}=St) -> + St#lint{doc_defined = {true, A}}. + +%% -doc " +%% Reset the tracking of a documentation attribute. + +%% That is, assume that a terminal object was reached, thus we need to reset +%% the state so that the linter understands that we have not seen any other +%% documentation attribute. +%% ". +untrack_doc(_AST, St) -> + St#lint{doc_defined = {false, none}}. + %% function_state(Form, State) -> %% State' %% Allow for record, type and opaque type definitions and spec @@ -914,18 +968,25 @@ attribute_state(Form, St) -> function_state({attribute,A,record,{Name,Fields}}, St) -> record_def(A, Name, Fields, St); -function_state({attribute,A,type,{TypeName,TypeDef,Args}}, St) -> - type_def(type, A, TypeName, TypeDef, Args, St); -function_state({attribute,A,opaque,{TypeName,TypeDef,Args}}, St) -> - type_def(opaque, A, TypeName, TypeDef, Args, St); +function_state({attribute,A,type,{TypeName,TypeDef,Args}}=AST, St) -> + St1 = untrack_doc(AST, St), + type_def(type, A, TypeName, TypeDef, Args, St1); +function_state({attribute,A,opaque,{TypeName,TypeDef,Args}}=AST, St) -> + St1 = untrack_doc(AST, St), + type_def(opaque, A, TypeName, TypeDef, Args, St1); function_state({attribute,A,spec,{Fun,Types}}, St) -> spec_decl(A, Fun, Types, St); +function_state({attribute,_A,doc,_Val}=AST, St) -> + track_doc(AST, St); +function_state({attribute,_A,moduledoc,_Val}=AST, St) -> + track_doc(AST, St); function_state({attribute,_A,dialyzer,_Val}, St) -> St; function_state({attribute,Aa,Attr,_Val}, St) -> add_error(Aa, {attribute,Attr}, St); -function_state({function,Anno,N,A,Cs}, St) -> - function(Anno, N, A, Cs, St); +function_state({function,Anno,N,A,Cs}=AST, St) -> + St1 = untrack_doc(AST, St), + function(Anno, N, A, Cs, St1); function_state({eof,Location}, St) -> eof(Location, St). %% eof(LastLocation, State) -> diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl index 7f21253a55da..c1c2ce434e58 100644 --- a/lib/stdlib/src/erl_parse.yrl +++ b/lib/stdlib/src/erl_parse.yrl @@ -1418,6 +1418,47 @@ build_attribute({atom,Aa,file}, Val) -> {attribute,Aa,file,{Name,Line}}; [Other|_] -> error_bad_decl(Other, file) end; +build_attribute({atom,Aa,Attr}, Val) when Attr =:= doc; Attr =:= moduledoc -> + case Val of + [{atom,_,Value}] when is_boolean(Value) -> + {attribute,Aa,Attr,Value}; + [{atom,_,hidden=Value}] -> + {attribute,Aa,Attr,Value}; + [{string,_,Value}] -> + {attribute,Aa,Attr,Value}; + [{bin,_, _} = Bin] -> + case term(Bin) of + Value when is_binary(Value) -> + {attribute,Aa,Attr,Value}; + _Else -> + error_bad_decl(Bin, doc) + end; + [{map,_,Pairs} = Expr] -> + Value = + try + maps:from_list( + lists:map( + fun({map_field_assoc,_,K,V}) -> + case normalise(K) of + equiv when Attr =:= doc, element(1, V) =:= call -> + {equiv, V}; + NormalK -> + {NormalK, normalise(attribute_farity(V))} + end; + (E) -> + throw({badarg, E}) + end, Pairs)) + catch {badarg,E} -> + ret_abstr_err(E, "bad attribute"); + _:_ -> + ret_abstr_err(Expr, "bad attribute") + end, + {attribute,Aa,Attr,Value}; + [{tuple,_,[{atom,_,file},{string,_,Value}]}] -> + {attribute,Aa,Attr,{file,Value}}; + [Other|_] -> + error_bad_decl(Other, doc) + end; build_attribute({atom,Aa,Attr}, Val) -> case Val of [Expr0] -> diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src index 48a49ba4650d..15b1f6f58ba5 100644 --- a/lib/stdlib/src/stdlib.app.src +++ b/lib/stdlib/src/stdlib.app.src @@ -116,6 +116,6 @@ dets]}, {applications, [kernel]}, {env, []}, - {runtime_dependencies, ["sasl-3.0","kernel-9.2","erts-14.2","crypto-4.5", + {runtime_dependencies, ["sasl-3.0","kernel-9.3","erts-14.2","crypto-4.5", "compiler-5.0"]} ]}. diff --git a/lib/stdlib/test/beam_lib_SUITE.erl b/lib/stdlib/test/beam_lib_SUITE.erl index ef3a61569916..11c0253ccb67 100644 --- a/lib/stdlib/test/beam_lib_SUITE.erl +++ b/lib/stdlib/test/beam_lib_SUITE.erl @@ -453,7 +453,7 @@ strip_add_chunks(Conf) when is_list(Conf) -> compare_chunks(B1, NB1, NBId1), %% Keep all the extra chunks - ExtraChunks = ["Abst", "Dbgi", "Attr", "CInf", "LocT", "Atom"], + ExtraChunks = ["Abst", "Dbgi", "Attr", "CInf", "Docs", "LocT", "Atom"], {ok, {simple, AB1}} = beam_lib:strip(B1, ExtraChunks), ABId1 = chunk_ids(AB1), true = length(BId1) == length(ABId1), diff --git a/lib/stdlib/test/epp_SUITE.erl b/lib/stdlib/test/epp_SUITE.erl index 90b1712d140a..b440f83be512 100644 --- a/lib/stdlib/test/epp_SUITE.erl +++ b/lib/stdlib/test/epp_SUITE.erl @@ -30,7 +30,7 @@ otp_11728/1, encoding/1, extends/1, function_macro/1, test_error/1, test_warning/1, otp_14285/1, test_if/1,source_name/1,otp_16978/1,otp_16824/1,scan_file/1,file_macro/1, - deterministic_include/1, nondeterministic_include/1]). + deterministic_include/1, nondeterministic_include/1, moduledoc_include/1]). -export([epp_parse_erl_form/2]). @@ -73,7 +73,7 @@ all() -> otp_8665, otp_8911, otp_10302, otp_10820, otp_11728, encoding, extends, function_macro, test_error, test_warning, otp_14285, test_if, source_name, otp_16978, otp_16824, scan_file, file_macro, - deterministic_include, nondeterministic_include]. + deterministic_include, nondeterministic_include, moduledoc_include]. groups() -> [{upcase_mac, [], [upcase_mac_1, upcase_mac_2]}, @@ -127,6 +127,48 @@ file_macro(Config) when is_list(Config) -> "Other source" = FileA = FileB, ok. +moduledoc_include(Config) when is_list(Config) -> + PrivDir = proplists:get_value(priv_dir, Config), + ModuleFileContent = <<"-module(moduledoc). + + -moduledoc {file, \"README.md\"}. + + -export([]). + ">>, + DocFileContent = <<"# README + + This file is a test + ">>, + CreateFile = fun (Dir, File, Content) -> + Dirname = filename:join([PrivDir, Dir]), + ok = create_dir(Dirname), + Filename = filename:join([Dirname, File]), + ok = file:write_file(Filename, Content), + Filename + end, + + %% positive test: checks that all works as expected + ModuleName = CreateFile("module_attr", "moduledoc.erl", ModuleFileContent), + DocName = CreateFile("module_attr", "README.md", DocFileContent), + {ok, List} = epp:parse_file(ModuleName, []), + {attribute, _, moduledoc, ModuleDoc} = lists:keyfind(moduledoc, 3, List), + ?assertEqual({ok, unicode:characters_to_binary(ModuleDoc)}, file:read_file(DocName)), + + %% negative test: checks that we produce an expected error + ModuleErrContent = binary:replace(ModuleFileContent, <<"README">>, <<"NotExistingFile">>), + ModuleErrName = CreateFile("module_attr", "moduledoc_err.erl", ModuleErrContent), + {ok, ListErr} = epp:parse_file(ModuleErrName, []), + {error,{_,epp,{moduledoc,file, "NotExistingFile.md"}}} = lists:keyfind(error, 1, ListErr), + + ok. + +create_dir(Dir) -> + case file:make_dir(Dir) of + ok -> ok; + {error, eexist} -> ok; + _ -> error + end. + deterministic_include(Config) when is_list(Config) -> DataDir = proplists:get_value(data_dir, Config), File = filename:join(DataDir, "deterministic_include.erl"), @@ -930,11 +972,12 @@ scan_file(Config) when is_list(Config) -> [FileForm1, ModuleForm, ExportForm, FileForm2, FileForm3, FunctionForm, {eof,_}] = Toks, - [{'-',_}, {atom,_,file}, {'(',_} | _ ] = FileForm1, + [{'-',_}, {atom,_,file}, {'(',_} | _ ] = FileForm1, [{'-',_}, {atom,_,module}, {'(',_} | _ ] = ModuleForm, [{'-',_}, {atom,_,export}, {'(',_} | _ ] = ExportForm, - [{'-',_}, {atom,_,file}, {'(',_} | _ ] = FileForm2, - [{'-',_}, {atom,_,file}, {'(',_} | _ ] = FileForm3, + [{'-',_}, {atom,_,file}, {'(',_} | _ ] = FileForm2, + [{'-',_}, {atom,_,file}, {'(',_} | _ ] = FileForm3, + [{atom,_,ok}, {'(',_} | _] = FunctionForm, ok. macs(Epp) -> diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl index 64cf5643f776..c54c1bd00d9f 100644 --- a/lib/stdlib/test/erl_lint_SUITE.erl +++ b/lib/stdlib/test/erl_lint_SUITE.erl @@ -36,6 +36,7 @@ -export([all/0, suite/0, groups/0]). -export([singleton_type_var_errors/1, + documentation_attributes/1, unused_vars_warn_basic/1, unused_vars_warn_lc/1, unused_vars_warn_rec/1, @@ -116,6 +117,7 @@ all() -> redefined_builtin_type, tilde_k, singleton_type_var_errors, + documentation_attributes, match_float_zero, undefined_module]. @@ -909,6 +911,108 @@ unused_import(Config) when is_list(Config) -> [] = run(Config, Ts), ok. +documentation_attributes(Config) when is_list(Config) -> + Ts = [{error_moduledoc, + <<"-moduledoc \"\"\" + Error + \"\"\". + -import(lists, []). + + -moduledoc \"\"\" + Duplicate entry + \"\"\". + main() -> error. + ">>, + [], + {errors,[{{6,15},erl_lint,{moduledoc,duplicate_doc_attribute,1}}], []}}, + + + {error_doc_import, + <<"-doc \"\"\" + Error + \"\"\". + -import(lists, []). + + -doc \"\"\" + Duplicate entry + \"\"\". + main() -> error. + ">>, + [], + {errors,[{{6,15},erl_lint,{doc,duplicate_doc_attribute,1}}], []}}, + + {error_doc_export, + <<"-doc \"\"\" + Error + \"\"\". + -export([]). + + -doc \"\"\" + Duplicate entry + \"\"\". + main() -> error. + ">>, + [], + {errors,[{{6,16},erl_lint,{doc,duplicate_doc_attribute,1}}], []}}, + + {error_doc_export_type, + <<"-doc \"\"\" + Error + \"\"\". + -export_type([]). + + -doc \"\"\" + Duplicate entry + \"\"\". + main() -> error. + ">>, + [], + {errors,[{{6,16},erl_lint,{doc,duplicate_doc_attribute,1}}], []}}, + + {error_doc_include, + <<"-doc \"\"\" + Error + \"\"\". + -include_lib(\"common_test/include/ct.hrl\"). + + -doc \"\"\" + Duplicate entry + \"\"\". + main() -> error. + ">>, + [], + {errors,[{{6,16},erl_lint,{doc,duplicate_doc_attribute,1}}], []}}, + + {error_doc_behaviour, + <<"-doc \"\"\" + Error + \"\"\". + -behaviour(gen_server). + + -doc \"\"\" + Duplicate entry + \"\"\". + main() -> error. + ">>, + [], + {error,[{{6,16},erl_lint,{doc,duplicate_doc_attribute,1}}], + [{{4,16},erl_lint,{undefined_behaviour_func,{handle_call,3},gen_server}}, + {{4,16},erl_lint,{undefined_behaviour_func,{handle_cast,2},gen_server}}, + {{4,16},erl_lint,{undefined_behaviour_func,{init,1},gen_server}}]}}, + + {ok_doc_in_wrong_position, + <<"-doc \"\"\" + Bad position, that gets attached to function. + We do not report this as an error. + \"\"\". + -include_lib(\"common_test/include/ct.hrl\"). + + main() -> ok. + ">>, [], []} + ], + [] = run(Config, Ts), + ok. + %% Test singleton type variables singleton_type_var_errors(Config) when is_list(Config) -> Ts = [{singleton_error1, diff --git a/make/otp.mk.in b/make/otp.mk.in index 1ed554ee7630..88a7d14b3311 100644 --- a/make/otp.mk.in +++ b/make/otp.mk.in @@ -104,7 +104,7 @@ endif ifdef PRIMARY_BOOTSTRAP ERL_COMPILE_FLAGS += +slim else - ERL_COMPILE_FLAGS += +debug_info + ERL_COMPILE_FLAGS += +debug_info +no_docs endif ifeq ($(ERL_DETERMINISTIC),yes) ERL_COMPILE_FLAGS += +deterministic diff --git a/system/doc/reference_manual/Makefile b/system/doc/reference_manual/Makefile index c51496ca5d29..932be45e8d05 100644 --- a/system/doc/reference_manual/Makefile +++ b/system/doc/reference_manual/Makefile @@ -94,6 +94,9 @@ clean clean_docs: rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) rm -f errs core *~ +$(XMLDIR)/%.xml: %.md $(ERL_TOP)/make/emd2exml + $(ERL_TOP)/make/emd2exml $< $@ + # ---------------------------------------------------- # Release Target # ---------------------------------------------------- diff --git a/system/doc/reference_manual/documentation.md b/system/doc/reference_manual/documentation.md new file mode 100644 index 000000000000..7eb351204e66 --- /dev/null +++ b/system/doc/reference_manual/documentation.md @@ -0,0 +1,414 @@ +# Documentation + +Documentation in Erlang is done through the `-moduledoc` and `-doc` [attributes][]. For example: + + -module(math). + -moduledoc """ + A module for basic arithmetic. + """. + + -export([add/2]). + + -doc "Adds two numbers together." + add(One, Two) -> One + Two. + +The `-moduledoc` attribute has to be located before the first `-doc` attribute or +function declaration. It documents the overall purpose of the module. + +The `-doc` attribute always precedes the [function][] or [attribute][attributes] it documents. +The attributes that can be documented are [user-defined types][] (`-type` and `-opaque`) and +[behaviour module attributes][] (`-callback`). + +By default the format used for documentation attributes is [Markdown][wikipedia] +but that can be changed by setting [module documentation metadata](#moduledoc-metadata). + +A good starting point to writing Markdown is [Basic writing and formatting syntax][github]. + +For details on what is allowed to be part of the `-moduledoc` and `-doc` attributes, see +[Documentation Attributes][doc_attrs]. + +`-doc` attributes have been available since Erlang/OTP 27. + +[attributes]: system/reference_manual:modules#module-attributes +[function]: system/reference_manual:functions +[user-defined types]: system/reference_manual:typespec#type-declarations-of-user-defined-types +[behaviour module attributes]: system/reference_manual:modules#behaviour-module-attribute +[Earmark]: https://github.com/robertdober/earmark_parser +[wikipedia]: https://en.wikipedia.org/wiki/Markdown +[github]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax +[doc_attrs]: system/reference_manual:modules#documentation-attributes + +## Documentation metadata + +It is possible to add metadata to the documentation entry. You do this by adding +a `-moduledoc` or `-doc` attribute with a map as argument. For example: + + -module(math). + -moduledoc """ + A module for basic arithmetic. + """. + -moduledoc #{ since => "1.0" }. + + -export([add/2]). + + -doc "Adds two number together." + -doc(#{ since => "1.0" }). + add(One, Two) -> One + Two. + +The metadata is used by documentation tools to provide extra information to +the user. There can be multiple metadata documentation entries, in which case +the maps will be merged with the latest taking precedence if there are +duplicate keys. Example: + + -doc "Adds two number together." + -doc #{ since => "1.0", author => "Joe" }. + -doc #{ since => "2.0" }. + add(One, Two) -> One + Two. + +This will result in a metadata entry of `#{ since => "2.0", author => "Joe" }`. + +The keys and values in the metadata map can be any type, but it is recommended +that only [atoms][] are used for keys and [strings][] for the values. + +[atoms]: data_types#atom +[strings]: data_types#string + +## External documentation files + +The `-moduledoc` and `-doc` can also be placed in external files. To do so use +`-doc {file, "path/to/doc.md"}` to point to the documentation. The path used is +relative to the file where the `-doc` attribute is located. For example: + + %% doc/add.md + Adds two numbers together + +and + + %% src/math.erl + -doc({file, "../doc/add.md"}). + add(One, Two) -> One + Two. + +## Documenting a module + +The module description should include details on how to use the API +and examples of the different functions working together. Here is a +good place to use images and other diagrams to better show the usage +of the module. Instead of writing a long text in the `moduledoc` +attribute, it could be better to break it out into an external page. + +The `moduledoc` attribute should start with a short paragraph +describing the module and then go into greater details. For example: + + -module(math). + -moduledoc """ + A module for basic arithmetic. + + This module can be used to add and subtract values. For example: + + ``` + 1> math:subtract(math:add(2, 3), 1). + 4 + ``` + """. + +### Moduledoc metadata + +There are three reserved metadata keys for `-moduledoc`: + +- `since` - Shows in which version of the application the module was added. +- `deprecated` - Shows a text in the documentation explaining that it is deprecated + and what to use instead. +- `format` - The format to use for all documentation in this module. + The default is `text/markdown`. + It should be written using the [mime type][] of the format. + +Example: + + -moduledoc {file, "../doc/math.asciidoc"}. + -moduledoc #{ since => "0.1", format => "text/asciidoc" }. + -moduledoc #{ deprecated => "Use the stdlib math module instead." }. + +[mime type]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types + +## Documenting functions, user-defined types, and callbacks + +Functions, types, and callbacks can be documented using the `-doc` attribute. +Each entry should start with a short paragraph describing the purpose of entity, +and then go into greater detail in needed. + +It is not recommended to include images or diagrams in this documentation as +it is used by IDEs and [c:h/1][] to show the documentation to the user. + +For example: + + -doc """ + A number that can be used by the math module. + + We use a special number here so that we know + that this number comes from this module. + """. + -opaque number() :: {math, erlang:number()}. + + -doc """ + Adds two number together. + + ### Example: + + ``` + 1> math:add(math:number(1), math:number(2)). + {number, 3} + ``` + """. + -spec add(number(), number()) -> number(). + add({number, One}, {number, Two}) -> {number, One + Two}. + +[c:h/1]: seemfa/stdlib:c#h/1 + +### Doc metadata + +There are four reserved metadata keys for `-doc`: + +- `since => unicode:chardata()` - Shows which version of the application the module + was added. +- `deprecated => unicode:chardata()` - Shows a text in the documentation explaining + that it is deprecated and what to use instead. The compiler will automatically + insert this key if there is a `-deprecated` attribute marking a function as deprecated. +- `equiv => unicode:chardata()` - Notes that this function is equivalent to another function + in this module. The equivalence can be described using either `Func/Arity` or `Func(Args)`. + For example: + + -doc #{ equiv => add/3 }. + add(One, Two) -> add(One, Two, []). + add(One, Two, Options) -> ... + + or + + -doc #{ equiv => add(One, Two, []) }. + -spec add(One :: number(), Two :: number()) -> number(). + add(One, Two) -> add(One, Two, []). + add(One, Two, Options) -> ... + + The entry into the [EEP-48][] doc chunk metadata is the value converted to a string. + +- `exported => boolean()` - A [boolean/0][] signifying if the entry is `exported` + or not. For any `-type` attribute this value is automatically set by the compiler + and should not be set by the user. + +[boolean/0]: seetype/erts:erlang#boolean + +### Doc slogans + +The doc slogan is a short text shown to describe the function and its arguments. +By default it is determined by looking at the names of the arguments in the `-spec` or +function. For example: + + add(One, Two) -> One + Two. + + -spec sub(One :: integer(), Two :: integer()) -> integer(). + sub(X, Y) -> X - Y. + +will have a slogan of `add(One, Two)` and `sub(One, Two)`. + +For types or callbacks, the slogan is derived from the type or callback specification. +For example: + + -type number(Value) :: {number, Value}. + %% slogan will be `number(Value)` + + -opaque number() :: {number, number()}. + %% slogan will be `number()` + + -callback increment(In :: number()) -> Out. + %% slogan will be `increment(In)` + + -callback increment(In) -> Out when + In :: number(). + %% slogan will be `increment(In)` + +If it is not possible to "easily" figure out a nice slogan from the code, the +MFA syntax is used instead. For example: `add/2`, `number/1`, `increment/1` + +It is possible to supply a custom slogan by placing it as the first line of +the `-doc` attribute. The provided slogan must be in the form of a function +declaration up until the `->`. For example: + + -doc """ + add(One, Two) + + Adds two numbers. + """. + add(A, B) -> A + B. + +Will create the slogan `add(One, Two)`. The slogan will be removed from the +documentation string, so in the example above only the text `"Adds two numbers"` +will be part of the documentation. This works for functions, types, and callbacks. + +## Links in Markdown + +When writing documentation in Markdown, links are automatically found in any +inline code segment that looks like an MFA. For example: + + -doc "See `sub/2` for more details". + +will create a link to the `sub/2` function in the current module if it exists. +One can also use `` `sub/2` `` as the link target. For example: + + -doc "See [subtract](`sub/2`) for more details". + -doc "See [`sub/2`] for more details". + -doc """ + See [subtract] for more details + + [subtract]: `sub/2` + """. + -doc """ + See [subtract][1] for more details + + [1]: `sub/2` + """. + +The above examples result in the same link being created. + +The link can also other entities: + +- `remote functions` - Use `module:function/arity` syntax. + + Example: + + -doc "See `math:sub/2` for more details". + +- `modules` - Write the module with a `m` prefix. Use anchors to + jump to a specific place in the module. + + Example: + + -doc "See `m:math` for more details". + -doc "See `m:math#anchor` for more details". + +- `types` - Use the same syntax as for local/remote function but add a `t` prefix. + + Example: + + -doc "See `t:number/0` for more details". + -doc "See `t:math:number/0` for more details". + +- `callbacks` - Use the same syntax as for local/remote function but add a `c` prefix. + + Example: + + -doc "See `c:increment/0` for more details". + -doc "See `c:math:increment/0` for more details". + +- `extra pages` - For extra pages in the current application use a normal link, + for example "`[release notes](notes.md)`". + For extra pages in another application use the `e` prefix and state which + application the page belongs to. One can also use anchors to jump to a specific + place in the page. + + Example: + + -doc "See `e:stdlib:unicode_usage` for more details". + -doc "See `e:stdlib:unicode_usage#notes-about-raw-filenames` for more details". + +## What is visible versus hidden? + +An Erlang [application][] normally consists of various public and private modules. That is, +modules that should be used by other applications and modules that should not. By default +all modules in an application are visible, but by setting `-moduledoc false.` +specific modules can be hidden from being listed as part of the available API. + +An Erlang [module][] consists of public and private functions and type attributes. +By default, all exported functions, exported types and callbacks are considered +visible and part of the modules public API. In addition, any non-exported +type that is referred to by any other visible type attribute is also visible, +but not considered to be part of the public API. For example: + + -export([example/0]). + + -type private() :: one. + -spec example() -> private(). + example() -> one. + +in the above code, the function `example/0` is exported and it referenced the +un-exported type `private/0`. Therefore both `example/0` and `private/0` will +be marked as visible. The `private/0` type will have the metadata field `exported` +set to `false` to show that it is not part of the public API. + +If you want to make a visible entity hidden you need to set the `-doc` attribute to +`false`. Let's revisit out previous example: + + -export([example/0]). + + -type private() :: one. + -spec example() -> private(). + -doc false. + example() -> one. + +The function `example/0` is exported but explicitly marked as hidden; therefore +both `example/0` and `private/0` will be hidden. + +Any documentation added to an automatically hidden entity +(non-exported function or type) is ignored and will generate a +warning. Such functions can be documented using comments. + +[application]: seeerl/kernel:application +[module]: modules + +## Compiling and getting documentation + +The Erlang compiler has support for compiling the documentation into [EEP-48][] +documentation chunks by passing the [beam_docs][] flag to [compile:file/1][], or +`+beam_docs` to [erlc][]. + +The documentation can then be retrieved using [code:get_doc/1][], or viewed using the +shell built-in command [h()][c:h/1]. For example: + + 1> h(math). + + math + + A module for basic arithmetic. + + 2> h(math, add). + + add(One, Two) + + Adds two numbers together. + +[EEP-48]: kernel:eep48_chapter +[compile:file/1]: seemfa/compiler:compile#file/1 +[beam_docs]: seeerl/compiler:compile#beam_docs +[erlc]: seecom/erts:erlc +[code:get_doc/1]: seemfa/kernel:code#get_doc/1 + +## Using ExDoc to generate HTML/ePub documentation + +[ExDoc][] has built-in support to generate documentation from Markdown. The simplest +way to use it is by using the [rebar3_ex_doc][] plugin. To setup a rebar3 project to +use [ExDoc][] to generate documentation add the following to your `rebar3.config`. + + %% Enable the plugin + {plugins, [rebar3_ex_doc]}. + + %% Configure the compiler to emit documentation + {profiles, [{docs, [{erl_opts, [beam_docs]}]}]}. + + {ex_doc, [ + {extras, ["README.md"]}, + {main, "README.md"}, + {source_url, "https://github.com/namespace/your_app"} + ]}. + +When configured you can run `rebar3 ex_doc` and the documentation will be generated to +`doc/index.html`. For more details and options see the [rebar3_ex_doc][] documentation. + +You can also download the [release escript bundle][ex_doc_escript] from github and +run it from the command line. The documentation for using the escript is +found by running `ex_doc --help`. + +If you are writing documentation that will be using [ExDoc][] to generate HTML/ePub +it is highly recommended to read its documentation. + +[ExDoc]: https://hexdocs.pm/ex_doc/ +[rebar3_ex_doc]: https://hexdocs.pm/rebar3_ex_doc +[ex_doc_escript]: https://github.com/elixir/ex_doc/releases/latest +[Earmark]: https://hexdocs.pm/earmark_parser diff --git a/system/doc/reference_manual/modules.xml b/system/doc/reference_manual/modules.xml index 360345d4adde..955374ecea92 100644 --- a/system/doc/reference_manual/modules.xml +++ b/system/doc/reference_manual/modules.xml @@ -104,6 +104,18 @@ fact(0) -> % | functions from. Functions is a list similar as for export.

+ -moduledoc(Documentation). or -moduledoc Documentation. + +

The user documentation for this module. The allowed values for + Documentation are the same as for + -doc. +

+

See the + Documentation + guide in the Erlang Reference Manual for more details about how + to use -moduledoc. +

+
-compile(Options).

Compiler options. Options is a single option @@ -247,6 +259,54 @@ behaviour_info(callbacks) -> Callbacks. which is not to be further updated.

+ +
+ Documentation attributes +

The module attribute -doc(Documentation) is used to provide user + documentation for a function/type/callback:

+
+-doc("Example documentation").
+example() -> ok.
+        
+

The attribute should be placed just before the entity it documents.The parenthesis are + optional around Documentation. The allowed values for Documentation are:

+ + literal string or utf-8 encoded binary string +

The string documenting the entity. Any literal string is allowed, + so both triple quoted strings + and sigils that translate to literal + strings can be used. The following examples are equivalent:

+ +-doc("Example \"docs\""). +-doc(<<"Example \"docs\""/utf8>>). +-doc ~S/Example "docs"/. +-doc """ + Example "docs" + """ +-doc ~B|Example "docs"|. + +

For clarity it is recommended to use either normal "strings" or + triple quoted strings for documentation attributes.

+
+ {file, file:filename()} + Read the contents of filename and use that as the documentation string. + false + Set the current entity as hidden, that is, it should not be listed as an + available function and has no documentation. + Metadata :: map() + +

+ Metadata about the current entity. Some of the keys in the + metadata have a special meaning. See Moduledoc metadata and Doc metadata for more details. +

+
+
+

It is possible to have multiple Metadata doc attributes per entity, but only a single + documentation string entry is allowed.

+

See the Documentation + guide in the Erlang Reference Manual for more details. +

+
@@ -364,12 +424,6 @@ behaviour_info(callbacks) -> Callbacks. all NIF functions in the module.

- native - -

Return true if the module has native compiled code. - Return false otherwise. In a system compiled without HiPE - support, the result is always false

-
diff --git a/system/doc/reference_manual/part.xml b/system/doc/reference_manual/part.xml index ec2e3e0306fe..abee9fba9ee1 100644 --- a/system/doc/reference_manual/part.xml +++ b/system/doc/reference_manual/part.xml @@ -34,6 +34,7 @@ + diff --git a/system/doc/reference_manual/xmlfiles.mk b/system/doc/reference_manual/xmlfiles.mk index 8e2af096991b..740b070dedc0 100644 --- a/system/doc/reference_manual/xmlfiles.mk +++ b/system/doc/reference_manual/xmlfiles.mk @@ -23,6 +23,7 @@ REF_MAN_CHAPTER_FILES = \ patterns.xml \ modules.xml \ functions.xml \ + documentation.xml \ expressions.xml \ macros.xml \ records.xml \