@@ -546,9 +546,14 @@ defmodule ExDoc.Language.Erlang do
546
546
{ op , _ , [ int ] } , acc when is_integer ( int ) and op in [ :+ , :- ] ->
547
547
{ nil , acc }
548
548
549
- # fun() (spec_to_quoted expands it to (... -> any())
550
- { :-> , _ , [ [ { name , _ , _ } ] , { :any , _ , _ } ] } , acc when name == :... ->
551
- { nil , acc }
549
+ # fun() (spec_to_quoted expands it to (... -> any() in Elixir v1.17 and earlier)
550
+ # TODO: Remove me when we require Elixir v1.18+
551
+ { :-> , _ , [ [ { name , _ , _ } ] , { :any , _ , _ } ] } = node , acc when name == :... ->
552
+ if Version . match? ( System . version ( ) , ">= 1.18.0-rc" ) do
553
+ { node , acc }
554
+ else
555
+ { nil , acc }
556
+ end
552
557
553
558
# record{type :: remote:type/arity}
554
559
{ :field_type , _ , [ name , { { :. , _ , [ r_mod , r_type ] } , _ , args } ] } , acc ->
@@ -588,7 +593,7 @@ defmodule ExDoc.Language.Erlang do
588
593
end
589
594
|> Enum . concat ( )
590
595
591
- put ( acc )
596
+ put_stack ( acc )
592
597
593
598
# Drop and re-add type name (it, the first element in acc, is dropped there too)
594
599
#
@@ -614,16 +619,21 @@ defmodule ExDoc.Language.Erlang do
614
619
defp replace ( formatted , acc , config ) do
615
620
String . replace ( formatted , Enum . map ( acc , & "#{ elem ( & 1 , 0 ) } (" ) , fn string ->
616
621
string = String . trim_trailing ( string , "(" )
617
- { other , ref } = pop ( )
618
-
619
- if string != other do
620
- Autolink . maybe_warn (
621
- config ,
622
- "internal inconsistency, please submit bug: #{ inspect ( string ) } != #{ inspect ( other ) } " ,
623
- nil ,
624
- nil
625
- )
626
- end
622
+
623
+ ref =
624
+ case get_stack ( ) do
625
+ [ { ^ string , ref } | tail ] ->
626
+ put_stack ( tail )
627
+ ref
628
+
629
+ _ ->
630
+ Autolink . maybe_warn (
631
+ config ,
632
+ "internal inconsistency when processing #{ inspect ( formatted ) } " ,
633
+ nil ,
634
+ nil
635
+ )
636
+ end
627
637
628
638
what =
629
639
case config . current_kfa do
@@ -691,16 +701,16 @@ defmodule ExDoc.Language.Erlang do
691
701
end )
692
702
end
693
703
694
- defp put ( items ) do
704
+ defp put_stack ( items ) do
695
705
Process . put ( { __MODULE__ , :stack } , items )
696
706
end
697
707
698
- defp pop ( ) do
699
- [ head | tail ] = Process . get ( { __MODULE__ , :stack } )
700
- put ( tail )
701
- head
708
+ defp get_stack ( ) do
709
+ Process . get ( { __MODULE__ , :stack } )
702
710
end
703
711
712
+ defp pp ( :fun ) , do: "fun"
713
+
704
714
defp pp ( name ) when is_atom ( name ) do
705
715
:io_lib . format ( "~p" , [ name ] ) |> IO . iodata_to_binary ( )
706
716
end
0 commit comments