Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file reason_attributes.ml
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091openReason_ompopenAst_411openLocationopenParsetree(** Kinds of attributes *)typeattributesPartition={arityAttrs:attributes;docAttrs:attributes;stdAttrs:attributes;jsxAttrs:attributes;stylisticAttrs:attributes;uncurried:bool}(** Partition attributes into kinds *)letrecpartitionAttributes?(partDoc=false)?(allowUncurry=true)attrs:attributesPartition=matchattrswith|[]->{arityAttrs=[];docAttrs=[];stdAttrs=[];jsxAttrs=[];stylisticAttrs=[];uncurried=false}|({attr_name={txt="bs"};attr_payload=PStr[];_}asattr)::atTl->letpartition=partitionAttributes~partDoc~allowUncurryatTlinifallowUncurrythen{partitionwithuncurried=true}else{partitionwithstdAttrs=attr::partition.stdAttrs}|({attr_name={txt="JSX"};_}asjsx)::atTl->letpartition=partitionAttributes~partDoc~allowUncurryatTlin{partitionwithjsxAttrs=jsx::partition.jsxAttrs}|({attr_name={txt="explicit_arity"};_}asarity_attr)::atTl|({attr_name={txt="implicit_arity"};_}asarity_attr)::atTl->letpartition=partitionAttributes~partDoc~allowUncurryatTlin{partitionwitharityAttrs=arity_attr::partition.arityAttrs}|({attr_name={txt="ocaml.text"};_}asdoc)::atTlwhenpartDoc=true->letpartition=partitionAttributes~partDoc~allowUncurryatTlin{partitionwithdocAttrs=doc::partition.docAttrs}|({attr_name={txt="ocaml.doc"|"ocaml.text"};_}asdoc)::atTlwhenpartDoc=true->letpartition=partitionAttributes~partDoc~allowUncurryatTlin{partitionwithdocAttrs=doc::partition.docAttrs}|({attr_name={txt="reason.raw_literal"};_}asattr)::atTl->letpartition=partitionAttributes~partDoc~allowUncurryatTlin{partitionwithstylisticAttrs=attr::partition.stylisticAttrs}|({attr_name={txt="reason.preserve_braces"};_}asattr)::atTl->letpartition=partitionAttributes~partDoc~allowUncurryatTlin{partitionwithstylisticAttrs=attr::partition.stylisticAttrs}|atHd::atTl->letpartition=partitionAttributes~partDoc~allowUncurryatTlin{partitionwithstdAttrs=atHd::partition.stdAttrs}letextractStdAttrsattrs=(partitionAttributesattrs).stdAttrsletextract_raw_literalattrs=letrecloopacc=function|{attr_name={txt="reason.raw_literal"};attr_payload=PStr[{pstr_desc=Pstr_eval({pexp_desc=Pexp_constant(Pconst_string(text,_,None))},_)}]}::rest->(Sometext,List.rev_appendaccrest)|[]->(None,List.revacc)|attr::rest->loop(attr::acc)restinloop[]attrsletwithout_stylistic_attrsattrs=letrecloopacc=function|attr::restwhen(partitionAttributes[attr]).stylisticAttrs!=[]->loopaccrest|[]->List.revacc|attr::rest->loop(attr::acc)restinloop[]attrsletis_jsx_attribute{attr_name={txt};_}=txt="JSX"(* TODO: Make this fast and not filter *)lethas_jsx_attributesattrs=List.existsis_jsx_attributeattrsletis_preserve_braces_attr{attr_name={txt};_}=txt="reason.preserve_braces"lethas_preserve_braces_attrsstylisticAttrs=List.existsis_preserve_braces_attrstylisticAttrsletmaybe_remove_stylistic_attrsattrsshould_preserve=ifshould_preservethenattrselseList.filter(function|{attr_name={txt="reason.raw_literal"};_}->true|_->false)attrs