@@ -538,6 +538,7 @@ <h1><a href="https://github.com/bloomberg/bucklescript">BuckleScript</a> User Ma
538
538
< li > < a href ="#_binding_to_simple_js_functions_values "> Binding to simple JS functions values</ a >
539
539
< ul class ="sectlevel3 ">
540
540
< li > < a href ="#_binding_to_global_value_bs_val "> Binding to global value: bs.val</ a > </ li >
541
+ < li > < a href ="#_scoped_values_bs_scope_since_1_7_2 "> Scoped values: bs.scope (@since 1.7.2)</ a > </ li >
541
542
< li > < a href ="#_binding_to_javascript_constructor_bs_new "> Binding to JavaScript constructor: bs.new</ a > </ li >
542
543
< li > < a href ="#_binding_to_a_value_from_a_module_bs_module "> Binding to a value from a module: bs.module</ a > </ li >
543
544
< li > < a href ="#_binding_the_whole_module_as_a_value_or_function "> Binding the whole module as a value or function</ a > </ li >
@@ -1614,6 +1615,68 @@ <h4 id="_binding_to_global_value_bs_val"><a class="anchor" href="#_binding_to_gl
1614
1615
</ div >
1615
1616
</ div >
1616
1617
< div class ="sect3 ">
1618
+ < h4 id ="_scoped_values_bs_scope_since_1_7_2 "> < a class ="anchor " href ="#_scoped_values_bs_scope_since_1_7_2 "> </ a > Scoped values: bs.scope (@since 1.7.2)</ h4 >
1619
+ < div class ="paragraph ">
1620
+ < p > In JS library, it is quite common to use a name as namespace,
1621
+ for example, if the user want to write a binding to
1622
+ < code > vscode.commands.executeCommand</ code > , assume < code > vscode</ code > is a module name,
1623
+ the user needs needs to type < code > commands</ code > properly before typing < code > executeCommand</ code > , and in practice, it is rarely useful to call < code > vscode.commands</ code > alone, for this reason, we introduce a convient sugar: < code > bs.scope</ code > </ p >
1624
+ </ div >
1625
+ < div class ="listingblock ">
1626
+ < div class ="title "> Example</ div >
1627
+ < div class ="content ">
1628
+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> type</ span > < span class ="tok-n "> param</ span >
1629
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> executeCommands</ span > < span class ="tok-o "> :</ span > < span class ="tok-kt "> string</ span > < span class ="tok-o "> -></ span > < span class ="tok-n "> param</ span > < span class ="tok-kt "> array</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> unit</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> ""</ span >
1630
+ < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> scope</ span > < span class ="tok-s2 "> "commands"</ span > < span class ="tok-o "> ]</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> module</ span > < span class ="tok-s2 "> "vscode"</ span > < span class ="tok-o "> ][@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> splice</ span > < span class ="tok-o "> ]</ span >
1631
+
1632
+ < span class ="tok-k "> let</ span > < span class ="tok-n "> f</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> b</ span > < span class ="tok-n "> c</ span > < span class ="tok-o "> =</ span >
1633
+ < span class ="tok-n "> executeCommands</ span > < span class ="tok-s2 "> "hi"</ span > < span class ="tok-o "> [|</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> ;</ span > < span class ="tok-n "> b</ span > < span class ="tok-o "> ;</ span > < span class ="tok-n "> c</ span > < span class ="tok-o "> |]</ span > </ code > </ pre >
1634
+ </ div >
1635
+ </ div >
1636
+ < div class ="listingblock ">
1637
+ < div class ="title "> Output</ div >
1638
+ < div class ="content ">
1639
+ < pre class ="pygments highlight "> < code data-lang ="js "> < span class ="tok-kd "> var</ span > < span class ="tok-nx "> Vscode</ span > < span class ="tok-o "> =</ span > < span class ="tok-nx "> require</ span > < span class ="tok-p "> (</ span > < span class ="tok-s2 "> "vscode"</ span > < span class ="tok-p "> );</ span >
1640
+ < span class ="tok-kd "> function</ span > < span class ="tok-nx "> f</ span > < span class ="tok-p "> (</ span > < span class ="tok-nx "> a</ span > < span class ="tok-p "> ,</ span > < span class ="tok-nx "> b</ span > < span class ="tok-p "> ,</ span > < span class ="tok-nx "> c</ span > < span class ="tok-p "> )</ span > < span class ="tok-p "> {</ span >
1641
+ < span class ="tok-nx "> Vscode</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> commands</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> executeCommands</ span > < span class ="tok-p "> (</ span > < span class ="tok-s2 "> "hi"</ span > < span class ="tok-p "> ,</ span > < span class ="tok-nx "> a</ span > < span class ="tok-p "> ,</ span > < span class ="tok-nx "> b</ span > < span class ="tok-p "> ,</ span > < span class ="tok-nx "> c</ span > < span class ="tok-p "> );</ span >
1642
+ < span class ="tok-k "> return</ span > < span class ="tok-nx "> process</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> env</ span > < span class ="tok-p "> ;</ span >
1643
+ < span class ="tok-p "> }</ span > </ code > </ pre >
1644
+ </ div >
1645
+ </ div >
1646
+ < div class ="paragraph ">
1647
+ < p > NOTE < code > bs.scope</ code > can also be chained as below:</ p >
1648
+ </ div >
1649
+ < div class ="listingblock ">
1650
+ < div class ="title "> Exmaple</ div >
1651
+ < div class ="content ">
1652
+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> external</ span > < span class ="tok-n "> makeBuffer</ span > < span class ="tok-o "> :</ span > < span class ="tok-kt "> int</ span > < span class ="tok-o "> -></ span > < span class ="tok-n "> buffer</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "Buffer"</ span >
1653
+ < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> new</ span > < span class ="tok-o "> ]</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> scope</ span > < span class ="tok-s2 "> "global"</ span > < span class ="tok-o "> ]</ span >
1654
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> hi</ span > < span class ="tok-o "> :</ span > < span class ="tok-kt "> string</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> ""</ span >
1655
+ < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> module</ span > < span class ="tok-s2 "> "z"</ span > < span class ="tok-o "> ]</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> scope</ span > < span class ="tok-s2 "> "a0"</ span > < span class ="tok-o "> ,</ span > < span class ="tok-s2 "> "a1"</ span > < span class ="tok-o "> ,</ span > < span class ="tok-s2 "> "a2"</ span > < span class ="tok-o "> ]</ span >
1656
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> ho</ span > < span class ="tok-o "> :</ span > < span class ="tok-kt "> string</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> ""</ span >
1657
+ < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> val</ span > < span class ="tok-o "> ]</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> scope</ span > < span class ="tok-s2 "> "a0"</ span > < span class ="tok-o "> ,</ span > < span class ="tok-s2 "> "a1"</ span > < span class ="tok-o "> ,</ span > < span class ="tok-s2 "> "a2"</ span > < span class ="tok-o "> ]</ span >
1658
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> imul</ span > < span class ="tok-o "> :</ span > < span class ="tok-kt "> int</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> int</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> int</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> ""</ span >
1659
+ < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> val</ span > < span class ="tok-o "> ]</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-n "> scope</ span > < span class ="tok-s2 "> "Math"</ span > < span class ="tok-o "> ]</ span >
1660
+ < span class ="tok-k "> let</ span > < span class ="tok-n "> f2</ span > < span class ="tok-bp "> ()</ span > < span class ="tok-o "> =</ span >
1661
+ < span class ="tok-n "> makeBuffer</ span > < span class ="tok-mi "> 20</ span > < span class ="tok-o "> ,</ span > < span class ="tok-n "> hi</ span > < span class ="tok-o "> ,</ span > < span class ="tok-n "> ho</ span > < span class ="tok-o "> ,</ span > < span class ="tok-n "> imul</ span > < span class ="tok-mi "> 1</ span > < span class ="tok-mi "> 2</ span > </ code > </ pre >
1662
+ </ div >
1663
+ </ div >
1664
+ < div class ="listingblock ">
1665
+ < div class ="title "> Output</ div >
1666
+ < div class ="content ">
1667
+ < pre class ="pygments highlight "> < code data-lang ="js "> < span class ="tok-kd "> var</ span > < span class ="tok-nx "> Z</ span > < span class ="tok-o "> =</ span > < span class ="tok-nx "> require</ span > < span class ="tok-p "> (</ span > < span class ="tok-s2 "> "z"</ span > < span class ="tok-p "> );</ span >
1668
+ < span class ="tok-kd "> function</ span > < span class ="tok-nx "> f2</ span > < span class ="tok-p "> ()</ span > < span class ="tok-p "> {</ span >
1669
+ < span class ="tok-k "> return</ span > < span class ="tok-cm "> /* tuple */</ span > < span class ="tok-p "> [</ span >
1670
+ < span class ="tok-k "> new</ span > < span class ="tok-p "> (</ span > < span class ="tok-nx "> global</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> Buffer</ span > < span class ="tok-p "> )(</ span > < span class ="tok-mi "> 20</ span > < span class ="tok-p "> ),</ span >
1671
+ < span class ="tok-nx "> Z</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> a0</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> a1</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> a2</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> hi</ span > < span class ="tok-p "> ,</ span >
1672
+ < span class ="tok-nx "> a0</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> a1</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> a2</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> ho</ span > < span class ="tok-p "> ,</ span >
1673
+ < span class ="tok-nb "> Math</ span > < span class ="tok-p "> .</ span > < span class ="tok-nx "> imul</ span > < span class ="tok-p "> (</ span > < span class ="tok-mi "> 1</ span > < span class ="tok-p "> ,</ span > < span class ="tok-mi "> 2</ span > < span class ="tok-p "> )</ span >
1674
+ < span class ="tok-p "> ];</ span >
1675
+ < span class ="tok-p "> }</ span > </ code > </ pre >
1676
+ </ div >
1677
+ </ div >
1678
+ </ div >
1679
+ < div class ="sect3 ">
1617
1680
< h4 id ="_binding_to_javascript_constructor_bs_new "> < a class ="anchor " href ="#_binding_to_javascript_constructor_bs_new "> </ a > Binding to JavaScript constructor: bs.new</ h4 >
1618
1681
< div class ="paragraph ">
1619
1682
< p > < code > bs.new</ code > is used to create a JavaScript object.</ p >
0 commit comments