@@ -546,9 +546,14 @@ defmodule ExDoc.Language.Erlang do
546546 { op , _ , [ int ] } , acc when is_integer ( int ) and op in [ :+ , :- ] ->
547547 { nil , acc }
548548
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
552557
553558 # record{type :: remote:type/arity}
554559 { :field_type , _ , [ name , { { :. , _ , [ r_mod , r_type ] } , _ , args } ] } , acc ->
@@ -588,7 +593,7 @@ defmodule ExDoc.Language.Erlang do
588593 end
589594 |> Enum . concat ( )
590595
591- put ( acc )
596+ put_stack ( acc )
592597
593598 # Drop and re-add type name (it, the first element in acc, is dropped there too)
594599 #
@@ -614,16 +619,21 @@ defmodule ExDoc.Language.Erlang do
614619 defp replace ( formatted , acc , config ) do
615620 String . replace ( formatted , Enum . map ( acc , & "#{ elem ( & 1 , 0 ) } (" ) , fn string ->
616621 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
627637
628638 what =
629639 case config . current_kfa do
@@ -691,16 +701,16 @@ defmodule ExDoc.Language.Erlang do
691701 end )
692702 end
693703
694- defp put ( items ) do
704+ defp put_stack ( items ) do
695705 Process . put ( { __MODULE__ , :stack } , items )
696706 end
697707
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 } )
702710 end
703711
712+ defp pp ( :fun ) , do: "fun"
713+
704714 defp pp ( name ) when is_atom ( name ) do
705715 :io_lib . format ( "~p" , [ name ] ) |> IO . iodata_to_binary ( )
706716 end
0 commit comments