JuliaLang / julia

The Julia Programming Language
https://julialang.org/
MIT License
45.63k stars 5.48k forks source link

The string `?(` bogs down REPL input to a crawl #56272

Open mbauman opened 12 hours ago

mbauman commented 12 hours ago

This is a funny one. Having the character combination of ?( anywhere in a REPL prompt — including in a string — makes input devastatingly slow. This is new in Julia v1.11. I'm on macOS 15.0.1 with an M1 processor and iTerm2:

https://github.com/user-attachments/assets/66198365-4cec-415d-a770-d75ac747fc5f

julia> versioninfo()
Julia Version 1.11.1
Commit 8f5b7ca12ad (2024-10-16 10:53 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: macOS (arm64-apple-darwin22.4.0)
  CPU: 8 × Apple M1 Pro
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, apple-m1)
Threads: 1 default, 0 interactive, 1 GC (on 6 virtual cores)
oscardssmith commented 11 hours ago

This is very funny. I think we're compiling stuff related to running REPL help mode for tab completion eroniously or something weird like that.

giordano commented 8 hours ago

This doesn't happen with Base.active_repl.options.hint_tab_completes = false, which makes me think the automatic completion while typing may see those characters as part of a regex. CC: @IanButterworth.

mbauman commented 8 hours ago

Yeah, I suspect it's likely a bad interaction between https://github.com/JuliaLang/julia/pull/38791 and https://github.com/JuliaLang/julia/pull/51229

IanButterworth commented 8 hours ago

Profile from while it's doing it. Looks like completion is finding a massive list of MethodCompletion and the time is spent doing repr for each of those.. And yeah @giordano sounds correct.. it shouldn't be searching in these cases, so a regex is bad or something.

dOverhead ╎ [+additional indent] Count File:Line  Function
=========================================================
Thread 1 (default) Task 0x000000010ca2f0d0 Total snapshots: 716. Utilization: 100%
   ╎1   @Base/pcre.jl:222  exec_r_data(re::Ptr{Nothing}, subject::String, offset::Int64, options::UInt32)
   ╎ 1   @Base/pcre.jl:199  exec
   ╎  1   @Base/pcre.jl:205  _exec
  1╎   1   @Base/pcre.jl:34  get_local_match_context()
   ╎1   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
  1╎ 1   @Base/show.jl:966  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎525 @REPL/src/LineEdit.jl:2868  (::REPL.LineEdit.var"#prompt!##2#prompt!##3"{REPL.Terminals.TTYTerminal, REPL.LineEdit.ModalInterface, REPL.LineEdit.MIState, ReentrantLock…
   ╎ 525 @Base/lock.jl:294  macro expansion
   ╎  525 @REPL/src/LineEdit.jl:2878  macro expansion
   ╎   525 @REPL/src/LineEdit.jl:1728  (::REPL.LineEdit.var"#match_input##0#match_input##1"{REPL.LineEdit.var"#186#187", String})(s::Any, p::Any)
   ╎    525 @Base/essentials.jl:1046  invokelatest
  5╎     525 @Base/essentials.jl:1049  #invokelatest#1
   ╎    ╎ 520 @REPL/src/LineEdit.jl:2544  (::REPL.LineEdit.var"#186#187")(s::REPL.LineEdit.MIState, data::Any, c::Union{Char, SubString{String}, String})
   ╎    ╎  520 @REPL/src/LineEdit.jl:387  check_for_hint(s::REPL.LineEdit.MIState)
   ╎    ╎   520 @REPL/src/REPL.jl:841  kwcall(::NamedTuple, ::typeof(REPL.LineEdit.complete_line), c::REPL.REPLCompletionProvider, s::REPL.LineEdit.PromptState, mod::Module)
   ╎    ╎    56  @REPL/src/REPL.jl:844  complete_line(c::REPL.REPLCompletionProvider, s::REPL.LineEdit.PromptState, mod::Module; hint::Bool)
   ╎    ╎     1   @REPL/src/REPLCompletions.jl:1226  completions(string::String, pos::Int64, context_module::Module, shift::Bool, hint::Bool)
   ╎    ╎    ╎ 1   d@Base/meta.jl:274  parse
   ╎    ╎    ╎  1   @Base/meta.jl:276  parse(str::String; filename::String, raise::Bool, depwarn::Bool)
   ╎    ╎    ╎   1   @Base/meta.jl:234  parse
   ╎    ╎    ╎    1   @Base/meta.jl:236  #parse#2
   ╎    ╎    ╎     1   @Base/meta.jl:198  _parse_string(text::String, filename::String, lineno::Int64, index::Int64, options::Symbol)
   ╎    ╎    ╎    ╎ 1   @JuliaSyntax/src/hooks.jl:117  (::Base.JuliaSyntax.var"#invoke_fixedworld#fix_world_age##2"{Base.JuliaSyntax.var"#invoke_fixedworld#108#fix_world_age##…
   ╎    ╎    ╎    ╎  1   @JuliaSyntax/src/hooks.jl:118  (::Base.JuliaSyntax.var"#invoke_fixedworld#fix_world_age##2"{Base.JuliaSyntax.var"#invoke_fixedworld#108#fix_world_age#…
   ╎    ╎    ╎    ╎   1   @Base/essentials.jl:1080  invoke_in_world(::UInt64, ::Any, ::Any, ::Vararg{Any})
   ╎    ╎    ╎    ╎    1   @Base/essentials.jl:1083  invoke_in_world(::UInt64, ::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}})
   ╎    ╎    ╎    ╎     1   @JuliaSyntax/src/hooks.jl:167  core_parser_hook(code::String, filename::String, lineno::Int64, offset::Int64, options::Symbol)
   ╎    ╎    ╎    ╎    ╎ 1   @JuliaSyntax/src/parse_stream.jl:699  bump_trivia
   ╎    ╎    ╎    ╎    ╎  1   @JuliaSyntax/src/parse_stream.jl:699  bump_trivia
   ╎    ╎    ╎    ╎    ╎   1   @JuliaSyntax/src/parse_stream.jl:702  bump_trivia(stream::Base.JuliaSyntax.ParseStream, flags::UInt16; skip_newlines::Bool, error::Nothing)
   ╎    ╎    ╎    ╎    ╎    1   @JuliaSyntax/src/parse_stream.jl:444  _lookahead_index
   ╎    ╎    ╎    ╎    ╎     1   @JuliaSyntax/src/parse_stream.jl:457  __lookahead_index(stream::Base.JuliaSyntax.ParseStream, n::Int64, skip_newlines::Bool)
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @JuliaSyntax/src/parse_stream.jl:382  _buffer_lookahead_tokens(lexer::Base.JuliaSyntax.Tokenize.Lexer{IOBuffer}, lookahead::Vector{Base.Julia…
   ╎    ╎    ╎    ╎    ╎    ╎  1   @JuliaSyntax/src/tokenize.jl:452  next_token
   ╎    ╎    ╎    ╎    ╎    ╎   1   @JuliaSyntax/src/tokenize.jl:456  next_token(l::Base.JuliaSyntax.Tokenize.Lexer{IOBuffer}, start::Bool)
   ╎    ╎    ╎    ╎    ╎    ╎    1   @JuliaSyntax/src/tokenize.jl:516  _next_token(l::Base.JuliaSyntax.Tokenize.Lexer{IOBuffer}, c::Char)
   ╎    ╎    ╎    ╎    ╎    ╎     1   @JuliaSyntax/src/tokenize.jl:1125  lex_quote(l::Base.JuliaSyntax.Tokenize.Lexer{IOBuffer})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/array.jl:1300  push!
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/array.jl:1303  _push!
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/array.jl:1145  _growend!
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/array.jl:1161  (::Base.var"#_growend!##0#_growend!##1"{Vector{Base.JuliaSyntax.Tokenize.StringState}, Int64, Int64, Int64, Int6…
  1╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/array.jl:1070  overallocation
   ╎    ╎     1   @REPL/src/REPLCompletions.jl:1252  completions(string::String, pos::Int64, context_module::Module, shift::Bool, hint::Bool)
   ╎    ╎    ╎ 1   @Base/meta.jl:274  parse
   ╎    ╎    ╎  1   @Base/meta.jl:276  parse(str::String; filename::String, raise::Bool, depwarn::Bool)
   ╎    ╎    ╎   1   @Base/meta.jl:234  parse
   ╎    ╎    ╎    1   @Base/meta.jl:236  #parse#2
   ╎    ╎    ╎     1   @Base/meta.jl:198  _parse_string(text::String, filename::String, lineno::Int64, index::Int64, options::Symbol)
   ╎    ╎    ╎    ╎ 1   @JuliaSyntax/src/hooks.jl:117  (::Base.JuliaSyntax.var"#invoke_fixedworld#fix_world_age##2"{Base.JuliaSyntax.var"#invoke_fixedworld#108#fix_world_age##…
   ╎    ╎    ╎    ╎  1   @JuliaSyntax/src/hooks.jl:118  (::Base.JuliaSyntax.var"#invoke_fixedworld#fix_world_age##2"{Base.JuliaSyntax.var"#invoke_fixedworld#108#fix_world_age#…
   ╎    ╎    ╎    ╎   1   @Base/essentials.jl:1080  invoke_in_world(::UInt64, ::Any, ::Any, ::Vararg{Any})
   ╎    ╎    ╎    ╎    1   @Base/essentials.jl:1083  invoke_in_world(::UInt64, ::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}})
   ╎    ╎    ╎    ╎     1   @JuliaSyntax/src/hooks.jl:175  core_parser_hook(code::String, filename::String, lineno::Int64, offset::Int64, options::Symbol)
   ╎    ╎    ╎    ╎    ╎ 1   @JuliaSyntax/src/parser_api.jl:42  parse!
   ╎    ╎    ╎    ╎    ╎  1   @JuliaSyntax/src/parser_api.jl:57  parse!(stream::Base.JuliaSyntax.ParseStream; rule::Symbol)
   ╎    ╎    ╎    ╎    ╎   1   @JuliaSyntax/src/parse_stream.jl:966  validate_tokens(stream::Base.JuliaSyntax.ParseStream)
   ╎    ╎    ╎    ╎    ╎    1   @JuliaSyntax/src/literal_parsing.jl:234  unescape_julia_string(io::Base.DevNull, txtbuf::Vector{UInt8}, firstind::UInt32, endind::UInt32, diagn…
   ╎    ╎    ╎    ╎    ╎     1   @Base/int.jl:519  <
  1╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/int.jl:83  <
   ╎    ╎     54  @REPL/src/REPLCompletions.jl:1254  completions(string::String, pos::Int64, context_module::Module, shift::Bool, hint::Bool)
   ╎    ╎    ╎ 2   @REPL/src/REPLCompletions.jl:798  complete_any_methods(ex_org::Expr, callee_module::Module, context_module::Module, moreargs::Bool, shift::Bool)
   ╎    ╎    ╎  2   @REPL/src/REPLCompletions.jl:779  recursive_explore_names
   ╎    ╎    ╎   2   @REPL/src/REPLCompletions.jl:764  recursive_explore_names!
   ╎    ╎    ╎    2   @REPL/src/REPLCompletions.jl:772  recursive_explore_names!(seen::IdSet{Any}, callee_module::Module, initial_module::Module, exploredmodules::IdSet{Module…
  1╎    ╎    ╎     1   @REPL/src/REPLCompletions.jl:766  recursive_explore_names!(seen::IdSet{Any}, callee_module::Module, initial_module::Module, exploredmodules::IdSet{Modul…
   ╎    ╎    ╎     1   @REPL/src/REPLCompletions.jl:772  recursive_explore_names!(seen::IdSet{Any}, callee_module::Module, initial_module::Module, exploredmodules::IdSet{Modul…
  1╎    ╎    ╎    ╎ 1   @REPL/src/REPLCompletions.jl:766  recursive_explore_names!(seen::IdSet{Any}, callee_module::Module, initial_module::Module, exploredmodules::IdSet{Modu…
   ╎    ╎    ╎ 51  @REPL/src/REPLCompletions.jl:799  complete_any_methods(ex_org::Expr, callee_module::Module, context_module::Module, moreargs::Bool, shift::Bool)
  1╎    ╎    ╎  1   @REPL/src/REPLCompletions.jl:874  complete_methods!(out::Vector{REPL.REPLCompletions.Completion}, funct::Any, args_ex::Vector{Any}, kwargs_ex::Set{Symbol},…
   ╎    ╎    ╎  49  @REPL/src/REPLCompletions.jl:875  complete_methods!(out::Vector{REPL.REPLCompletions.Completion}, funct::Any, args_ex::Vector{Any}, kwargs_ex::Set{Symbol},…
 49╎    ╎    ╎   49  @Base/runtime_internals.jl:1381  _methods_by_ftype
   ╎    ╎    ╎  1   @REPL/src/REPLCompletions.jl:878  complete_methods!(out::Vector{REPL.REPLCompletions.Completion}, funct::Any, args_ex::Vector{Any}, kwargs_ex::Set{Symbol},…
   ╎    ╎    ╎   1   @Base/strings/io.jl:110  sprint(f::Function, args::Type)
   ╎    ╎    ╎    1   @Base/strings/io.jl:117  sprint(f::Function, args::Type; context::Nothing, sizehint::Int64)
   ╎    ╎    ╎     1   @Base/show.jl:2552  show_signature_function(io::IOBuffer, ft::Any)
   ╎    ╎    ╎    ╎ 1   @Base/show.jl:2564  show_signature_function(io::IOBuffer, ft::Any, demangle::Bool, fargname::String, html::Bool, qualified::Bool)
   ╎    ╎    ╎    ╎  1   @Base/show.jl:2576  kwcall(::@NamedTuple{bold::Bool}, ::typeof(Base.print_within_stacktrace), io::IOBuffer, s::Type)
   ╎    ╎    ╎    ╎   1   @Base/show.jl:2580  #print_within_stacktrace#486
   ╎    ╎    ╎    ╎    1   @Base/strings/io.jl:35  print(io::IOBuffer, x::Type)
   ╎    ╎    ╎    ╎     1   @Base/show.jl:965  show
   ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:970  _show_type(io::IOBuffer, x::Type)
   ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:805  show_typealias(io::IOBuffer, x::Type)
   ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:178  isdeprecated
   ╎    ╎    ╎ 1   @REPL/src/REPLCompletions.jl:804  complete_any_methods(ex_org::Expr, callee_module::Module, context_module::Module, moreargs::Bool, shift::Bool)
   ╎    ╎    ╎  1   @Base/array.jl:2971  filter!(f::REPL.REPLCompletions.var"#complete_any_methods##0#complete_any_methods##1", a::Vector{REPL.REPLCompletions.Completion})
   ╎    ╎    ╎   1   @REPL/src/REPLCompletions.jl:808  (::REPL.REPLCompletions.var"#complete_any_methods##0#complete_any_methods##1")(c::REPL.REPLCompletions.MethodCompletion)
   ╎    ╎    ╎    1   @Base/essentials.jl:953  getindex(v::Core.SimpleVector, I::UnitRange{Int64})
   ╎    ╎    ╎     1   @Base/array.jl:674  _array_for
   ╎    ╎    ╎    ╎ 1   @Base/array.jl:671  _array_for
   ╎    ╎    ╎    ╎  1   @Base/abstractarray.jl:867  similar
   ╎    ╎    ╎    ╎   1   @Base/abstractarray.jl:868  similar
   ╎    ╎    ╎    ╎    1   @Base/boot.jl:631  Array
   ╎    ╎    ╎    ╎     1   @Base/boot.jl:618  Array
  1╎    ╎    ╎    ╎    ╎ 1   @Base/boot.jl:558  GenericMemory
   ╎    ╎    464 @REPL/src/REPL.jl:846  complete_line(c::REPL.REPLCompletionProvider, s::REPL.LineEdit.PromptState, mod::Module; hint::Bool)
   ╎    ╎     464 @REPL/src/REPLCompletions.jl:119  completion_text(c::REPL.REPLCompletions.MethodCompletion)
   ╎    ╎    ╎ 464 @REPL/src/REPLCompletions.jl:113  _completion_text
   ╎    ╎    ╎  464 @Base/strings/io.jl:290  repr
   ╎    ╎    ╎   464 @Base/strings/io.jl:290  #repr#441
   ╎    ╎    ╎    464 @Base/strings/io.jl:110  sprint
   ╎    ╎    ╎     464 @Base/strings/io.jl:117  sprint(f::Function, args::Method; context::Nothing, sizehint::Int64)
   ╎    ╎    ╎    ╎ 464 @Base/methodshow.jl:209  show(io::IOBuffer, m::Method)
   ╎    ╎    ╎    ╎  464 @Base/methodshow.jl:209  #show#507
   ╎    ╎    ╎    ╎   464 @Base/methodshow.jl:213  show_method
   ╎    ╎    ╎    ╎    417 @Base/methodshow.jl:214  show_method(io::IOContext{IOBuffer}, m::Method; modulecolor::Symbol, digit_align_width::Int64)
   ╎    ╎    ╎    ╎     417 @Base/methodshow.jl:56  arg_decl_parts
   ╎    ╎    ╎    ╎    ╎ 8   @Base/methodshow.jl:62  arg_decl_parts(m::Method, html::Bool)
   ╎    ╎    ╎    ╎    ╎  8   @Base/methodshow.jl:155  updated_methodloc(m::Method)
   ╎    ╎    ╎    ╎    ╎   1   @Base/methodshow.jl:138  fixup_stdlib_path
   ╎    ╎    ╎    ╎    ╎    1   @Base/path.jl:414  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎     1   @Base/strings/io.jl:381  join
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/strings/io.jl:363  _join_preserve_annotations
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/strings/io.jl:110  sprint
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/strings/io.jl:117  sprint(::Function, ::Vector{SubString{String}}, ::Vararg{Any}; context::Nothing, sizehint::Int64)
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/strings/io.jl:356  join(io::IOBuffer, iterator::Vector{SubString{String}}, delim::String)
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/strings/io.jl:254  print
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/strings/io.jl:252  write
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/iobuffer.jl:531  unsafe_write(to::IOBuffer, p::Ptr{UInt8}, nb::UInt64)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/iobuffer.jl:410  ensureroom
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/iobuffer.jl:326  _resize!(io::IOBuffer, sz::Int64)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/iobuffer.jl:165  _similar_data
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/iobuffer.jl:44  StringMemory
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/strings/string.jl:108  _string_n
   ╎    ╎    ╎    ╎    ╎   7   @Base/methodshow.jl:139  fixup_stdlib_path
   ╎    ╎    ╎    ╎    ╎    2   @Base/path.jl:394  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎     2   @Base/strings/util.jl:885  split
   ╎    ╎    ╎    ╎    ╎    ╎ 2   @Base/strings/util.jl:887  #split#429
   ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/array.jl:729  collect
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/array.jl:741  _collect(cont::UnitRange{Int64}, itr::Base.SplitIterator{String, Regex}, ::Base.HasEltype, isz::Base.SizeUnknown)
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/array.jl:1300  push!
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/array.jl:1304  _push!
  1╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/essentials.jl:11  length
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/array.jl:742  _collect(cont::UnitRange{Int64}, itr::Base.SplitIterator{String, Regex}, ::Base.HasEltype, isz::Base.SizeUnknown)
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/strings/util.jl:720  iterate
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/regex.jl:479  findnext
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/regex.jl:488  _findnext_re(re::Regex, str::String, idx::Int64, match_data::Ptr{Nothing})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/regex.jl:71  compile(regex::Regex)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/Base.jl:49  getproperty
   ╎    ╎    ╎    ╎    ╎    1   @Base/path.jl:399  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎     1   @Base/essentials.jl:910  getindex
  1╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/essentials.jl:11  length
   ╎    ╎    ╎    ╎    ╎    1   @Base/path.jl:400  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎     1   @Base/array.jl:1833  deleteat!
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/array.jl:1260  _deleteat!(a::Vector{SubString{String}}, i::Int64, delta::Int64)
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/array.jl:1242  _deleteend!(a::Vector{SubString{String}}, delta::Int64)
  1╎    ╎    ╎    ╎    ╎    ╎   1   @Base/int.jl:87  +
   ╎    ╎    ╎    ╎    ╎    3   @Base/path.jl:414  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎     3   @Base/strings/io.jl:381  join
   ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/strings/io.jl:363  _join_preserve_annotations
   ╎    ╎    ╎    ╎    ╎    ╎  3   @Base/strings/io.jl:110  sprint
  1╎    ╎    ╎    ╎    ╎    ╎   1   @Base/strings/io.jl:110  sprint(::Function, ::Vector{SubString{String}}, ::Vararg{Any}; context::Nothing, sizehint::Int64)
   ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/strings/io.jl:117  sprint(::Function, ::Vector{SubString{String}}, ::Vararg{Any}; context::Nothing, sizehint::Int64)
   ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/strings/io.jl:355  join(io::IOBuffer, iterator::Vector{SubString{String}}, delim::String)
   ╎    ╎    ╎    ╎    ╎    ╎     2   @Base/strings/io.jl:254  print
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 2   @Base/strings/io.jl:252  write
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/iobuffer.jl:531  unsafe_write(to::IOBuffer, p::Ptr{UInt8}, nb::UInt64)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/iobuffer.jl:410  ensureroom
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/iobuffer.jl:326  _resize!(io::IOBuffer, sz::Int64)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     2   @Base/iobuffer.jl:165  _similar_data
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 2   @Base/iobuffer.jl:44  StringMemory
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/strings/string.jl:108  _string_n
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/strings/string.jl:119  unsafe_wrap
   ╎    ╎    ╎    ╎    ╎ 2   @Base/methodshow.jl:63  arg_decl_parts(m::Method, html::Bool)
  2╎    ╎    ╎    ╎    ╎  2   @Base/methodshow.jl:50  method_argnames
   ╎    ╎    ╎    ╎    ╎ 376 @Base/methodshow.jl:69  arg_decl_parts(m::Method, html::Bool)
   ╎    ╎    ╎    ╎    ╎  17  @Base/methodshow.jl:41  argtype_decl(env::Base.ImmutableDict{Symbol, Any}, n::Symbol, sig::DataType, i::Int64, nargs::Int32, isva::Bool)
   ╎    ╎    ╎    ╎    ╎   17  @Base/strings/io.jl:169  string_with_env(env::Base.ImmutableDict{Symbol, Any}, xs::Type)
   ╎    ╎    ╎    ╎    ╎    17  @Base/strings/io.jl:35  print(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎     17  @Base/show.jl:965  show
   ╎    ╎    ╎    ╎    ╎    ╎ 8   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  8   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎   3   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    3   @Base/runtime_internals.jl:116  unsorted_names
  3╎    ╎    ╎    ╎    ╎    ╎     3   @Base/runtime_internals.jl:116  #unsorted_names#6
  2╎    ╎    ╎    ╎    ╎    ╎   5   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:404  isconst
  2╎    ╎    ╎    ╎    ╎    ╎    2   @Base/runtime_internals.jl:178  isdeprecated
   ╎    ╎    ╎    ╎    ╎    ╎ 8   @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  8   @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
   ╎    ╎    ╎    ╎    ╎    ╎   4   @Base/show.jl:828  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    4   @Base/runtime_internals.jl:116  unsorted_names
  4╎    ╎    ╎    ╎    ╎    ╎     4   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:829  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:404  isconst
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:178  isdeprecated
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:831  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/boot.jl:331  has_free_typevars
  1╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:846  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:980  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:1410  show_delim_array
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:1421  show_delim_array(io::IOContext{IOBuffer}, itr::Vector{Any}, op::Char, delim::Char, cl::Char, delim_one::Bool, i1::Int64…
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:1007  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:1199  show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:714  show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎  359 @Base/methodshow.jl:46  argtype_decl(env::Base.ImmutableDict{Symbol, Any}, n::Symbol, sig::DataType, i::Int64, nargs::Int32, isva::Bool)
   ╎    ╎    ╎    ╎    ╎   358 @Base/strings/io.jl:169  string_with_env(env::Base.ImmutableDict{Symbol, Any}, xs::Type)
   ╎    ╎    ╎    ╎    ╎    358 @Base/strings/io.jl:35  print(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎     358 @Base/show.jl:965  show
   ╎    ╎    ╎    ╎    ╎    ╎ 2   @Base/show.jl:968  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:1081  show_type_name(io::IOContext{IOBuffer}, tn::Core.TypeName)
  1╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:1039  check_world_bounded(tn::Core.TypeName)
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:1083  show_type_name(io::IOContext{IOBuffer}, tn::Core.TypeName)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:1813  show_sym
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:1814  show_sym(io::IOContext{IOBuffer}, sym::Symbol; allow_macroname::Bool)
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:1775  is_valid_identifier(sym::Symbol)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:1572  isidentifier
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:1570  isidentifier(s::String)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/reduce.jl:1293  all
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/reduce.jl:1302  _all(f::typeof(Base.is_id_char), itr::Base.Iterators.Rest{String, Int64}, ::Colon)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:1542  is_id_char
   ╎    ╎    ╎    ╎    ╎    ╎ 216 @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  208 @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:0  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎   67  @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    67  @Base/runtime_internals.jl:116  unsorted_names
 67╎    ╎    ╎    ╎    ╎    ╎     67  @Base/runtime_internals.jl:116  #unsorted_names#6
 26╎    ╎    ╎    ╎    ╎    ╎   81  @Base/show.jl:625  make_typealias(x::Type)
 24╎    ╎    ╎    ╎    ╎    ╎    24  @Base/runtime_internals.jl:404  isconst
 31╎    ╎    ╎    ╎    ╎    ╎    31  @Base/runtime_internals.jl:178  isdeprecated
 32╎    ╎    ╎    ╎    ╎    ╎   32  @Base/show.jl:626  make_typealias(x::Type)
  3╎    ╎    ╎    ╎    ╎    ╎   14  @Base/show.jl:627  make_typealias(x::Type)
 11╎    ╎    ╎    ╎    ╎    ╎    11  @Base/boot.jl:331  has_free_typevars
  1╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:629  make_typealias(x::Type)
 11╎    ╎    ╎    ╎    ╎    ╎   11  @Base/show.jl:644  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:662  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/array.jl:915  iterate
  1╎    ╎    ╎    ╎    ╎    ╎     1   @Base/essentials.jl:11  length
   ╎    ╎    ╎    ╎    ╎    ╎  8   @Base/show.jl:808  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎   8   @Base/show.jl:755  show_typealias(io::IOContext{IOBuffer}, name::GlobalRef, x::Type, env::Core.SimpleVector, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    8   @Base/show.jl:714  show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎     8   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 5   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  5   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/runtime_internals.jl:116  #unsorted_names#6
  3╎    ╎    ╎    ╎    ╎    ╎    ╎   3   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:627  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  3   @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:828  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/runtime_internals.jl:116  #unsorted_names#6
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:829  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:830  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎ 32  @Base/show.jl:973  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  32  @Base/show.jl:1107  show_datatype
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:1116  show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/strings/io.jl:254  print
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/strings/io.jl:252  write
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/io.jl:452  unsafe_write
  1╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/iobuffer.jl:530  unsafe_write(to::IOBuffer, p::Ptr{UInt8}, nb::UInt64)
   ╎    ╎    ╎    ╎    ╎    ╎   9   @Base/show.jl:1163  show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    9   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎     6   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 6   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/runtime_internals.jl:116  unsorted_names
  2╎    ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:404  isconst
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:178  isdeprecated
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:627  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:662  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/array.jl:915  iterate
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/essentials.jl:11  length
   ╎    ╎    ╎    ╎    ╎    ╎     3   @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:828  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:116  #unsorted_names#6
  1╎    ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/show.jl:829  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:178  isdeprecated
   ╎    ╎    ╎    ╎    ╎    ╎   5   @Base/show.jl:1170  show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    5   @Base/show.jl:2835  show(io::IOContext{IOBuffer}, vm::Core.TypeofVararg)
   ╎    ╎    ╎    ╎    ╎    ╎     5   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:404  isconst
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 4   @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  4   @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:828  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/runtime_internals.jl:116  unsorted_names
  2╎    ╎    ╎    ╎    ╎    ╎    ╎     2   @Base/runtime_internals.jl:116  #unsorted_names#6
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:829  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:178  isdeprecated
   ╎    ╎    ╎    ╎    ╎    ╎   17  @Base/show.jl:1199  show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    17  @Base/show.jl:722  show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎     17  @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 14  @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  14  @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/runtime_internals.jl:116  #unsorted_names#6
  4╎    ╎    ╎    ╎    ╎    ╎    ╎   6   @Base/show.jl:625  make_typealias(x::Type)
  2╎    ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/runtime_internals.jl:404  isconst
  4╎    ╎    ╎    ╎    ╎    ╎    ╎   4   @Base/show.jl:626  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:627  make_typealias(x::Type)
  2╎    ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:644  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:829  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:178  isdeprecated
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 2   @Base/show.jl:980  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/show.jl:1410  show_delim_array
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:1421  show_delim_array(io::IOContext{IOBuffer}, itr::Vector{Any}, op::Char, delim::Char, cl::Char, delim_one::Bool, i1::…
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     2   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 2   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:404  isconst
   ╎    ╎    ╎    ╎    ╎    ╎ 68  @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  66  @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
   ╎    ╎    ╎    ╎    ╎    ╎   10  @Base/show.jl:828  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    10  @Base/runtime_internals.jl:116  unsorted_names
 10╎    ╎    ╎    ╎    ╎    ╎     10  @Base/runtime_internals.jl:116  #unsorted_names#6
  5╎    ╎    ╎    ╎    ╎    ╎   23  @Base/show.jl:829  make_typealiases(x::Type)
  7╎    ╎    ╎    ╎    ╎    ╎    7   @Base/runtime_internals.jl:404  isconst
 11╎    ╎    ╎    ╎    ╎    ╎    11  @Base/runtime_internals.jl:178  isdeprecated
  5╎    ╎    ╎    ╎    ╎    ╎   5   @Base/show.jl:830  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:831  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/boot.jl:331  has_free_typevars
 24╎    ╎    ╎    ╎    ╎    ╎   24  @Base/show.jl:832  make_typealiases(x::Type)
  2╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:846  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:856  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/show.jl:909  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
   ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎     2   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:627  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    ╎    ╎ 33  @Base/show.jl:980  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  33  @Base/show.jl:1410  show_delim_array
   ╎    ╎    ╎    ╎    ╎    ╎   33  @Base/show.jl:1421  show_delim_array(io::IOContext{IOBuffer}, itr::Vector{Any}, op::Char, delim::Char, cl::Char, delim_one::Bool, i1::Int64…
   ╎    ╎    ╎    ╎    ╎    ╎    33  @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:968  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:1060  show_type_name(io::IOContext{IOBuffer}, tn::Core.TypeName)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:1029  is_global_function(tn::Core.TypeName, globname::Symbol)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:200  isbindingresolved
   ╎    ╎    ╎    ╎    ╎    ╎     11  @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 11  @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  6   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   6   @Base/runtime_internals.jl:116  unsorted_names
  6╎    ╎    ╎    ╎    ╎    ╎    ╎    6   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:404  isconst
  3╎    ╎    ╎    ╎    ╎    ╎    ╎  3   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:662  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/array.jl:915  iterate
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/essentials.jl:11  length
   ╎    ╎    ╎    ╎    ╎    ╎     4   @Base/show.jl:973  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 4   @Base/show.jl:1107  show_datatype
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  4   @Base/show.jl:1199  show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   4   @Base/show.jl:722  show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    4   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     4   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 4   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:178  isdeprecated
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:644  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:652  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    ╎    ╎     17  @Base/show.jl:1012  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 17  @Base/show.jl:796  show_wheres(io::IOContext{IOBuffer}, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  17  @Base/show.jl:2826  show(io::IOContext{IOBuffer}, tv::TypeVar)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   17  @Base/show.jl:2807  (::Base.var"#show_bound#show##2")(io::IOContext{IOBuffer}, b::Any)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    17  @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:178  isdeprecated
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     10  @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 10  @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
  9╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  9   @Base/show.jl:832  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:856  make_typealiases(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     6   @Base/show.jl:980  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 6   @Base/show.jl:1410  show_delim_array
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  6   @Base/show.jl:1421  show_delim_array(io::IOContext{IOBuffer}, itr::Vector{Any}, op::Char, delim::Char, cl::Char, delim_one::Bool, …
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   6   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    5   @Base/show.jl:1012  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎     5   @Base/show.jl:796  show_wheres(io::IOContext{IOBuffer}, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 5   @Base/show.jl:2826  show(io::IOContext{IOBuffer}, tv::TypeVar)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  5   @Base/show.jl:2807  (::Base.var"#show_bound#show##2")(io::IOContext{IOBuffer}, b::Any)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   5   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    4   @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎     4   @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
  3╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 4   @Base/show.jl:832  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:980  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:1410  show_delim_array
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:1421  show_delim_array(io::IOContext{IOBuffer}, itr::Vector{Any}, op::Char, delim::Char, cl::Char, delim_on…
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:1007  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  3   @Base/show.jl:1199  show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:714  show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎     2   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 2   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
  2╎    ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:722  show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:404  isconst
   ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:1009  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  3   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎   3   @Base/show.jl:980  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    3   @Base/show.jl:1410  show_delim_array
   ╎    ╎    ╎    ╎    ╎    ╎     3   @Base/show.jl:1421  show_delim_array(io::IOContext{IOBuffer}, itr::Vector{Any}, op::Char, delim::Char, cl::Char, delim_one::Bool, i1::Int…
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  3   @Base/show.jl:973  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   3   @Base/show.jl:1107  show_datatype
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    3   @Base/show.jl:1199  show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎     3   @Base/show.jl:722  show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎  3   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎   3   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/runtime_internals.jl:116  #unsorted_names#6
  2╎    ╎    ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:1012  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:796  show_wheres(io::IOContext{IOBuffer}, wheres::Vector{TypeVar})
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:2826  show(io::IOContext{IOBuffer}, tv::TypeVar)
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/show.jl:2807  (::Base.var"#show_bound#show##2")(io::IOContext{IOBuffer}, b::Any)
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎   1   @Base/strings/io.jl:171  string_with_env(env::Base.ImmutableDict{Symbol, Any}, xs::Type)
   ╎    ╎    ╎    ╎    ╎    1   @Base/iobuffer.jl:513  _unsafe_take!
  1╎    ╎    ╎    ╎    ╎     1   @Base/Base.jl:49  getproperty
  6╎    ╎    ╎    ╎    ╎ 31  @Base/methodshow.jl:71  arg_decl_parts(m::Method, html::Bool)
  7╎    ╎    ╎    ╎    ╎  25  @Base/strings/io.jl:110  kwcall(::@NamedTuple{context::Base.ImmutableDict{Symbol, Any}}, ::typeof(sprint), ::Function, ::Type, ::Vararg{Any})
   ╎    ╎    ╎    ╎    ╎   18  @Base/strings/io.jl:115  sprint(::Function, ::Type, ::Vararg{Any}; context::Base.ImmutableDict{Symbol, Any}, sizehint::Int64)
   ╎    ╎    ╎    ╎    ╎    18  @Base/show.jl:2552  show_signature_function(io::IOContext{IOBuffer}, ft::Any, demangle::Bool, fargname::String, html::Bool)
   ╎    ╎    ╎    ╎    ╎     9   @Base/show.jl:2564  show_signature_function(io::IOContext{IOBuffer}, ft::Any, demangle::Bool, fargname::String, html::Bool, qualified::Bool)
   ╎    ╎    ╎    ╎    ╎    ╎ 9   @Base/show.jl:2576  kwcall(::@NamedTuple{bold::Bool}, ::typeof(Base.print_within_stacktrace), io::IOContext{IOBuffer}, s::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  9   @Base/show.jl:2580  #print_within_stacktrace#486
   ╎    ╎    ╎    ╎    ╎    ╎   9   @Base/strings/io.jl:35  print(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    9   @Base/show.jl:965  show
   ╎    ╎    ╎    ╎    ╎    ╎     9   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 9   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:0  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  4   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   4   @Base/runtime_internals.jl:116  unsorted_names
  4╎    ╎    ╎    ╎    ╎    ╎    ╎    4   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:178  isdeprecated
  2╎    ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/show.jl:627  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    ╎     9   @Base/show.jl:2570  show_signature_function(io::IOContext{IOBuffer}, ft::Any, demangle::Bool, fargname::String, html::Bool, qualified::Bool)
   ╎    ╎    ╎    ╎    ╎    ╎ 9   @Base/show.jl:2576  print_within_stacktrace
   ╎    ╎    ╎    ╎    ╎    ╎  9   @Base/show.jl:0  print_within_stacktrace(::IOContext{IOBuffer}, ::String, ::Vararg{Any}; color::Symbol, bold::Bool)
   ╎    ╎    ╎    ╎    ╎    ╎   9   @Base/strings/io.jl:46  print(::IOContext{IOBuffer}, ::String, ::Type, ::String)
   ╎    ╎    ╎    ╎    ╎    ╎    9   @Base/strings/io.jl:35  print(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎     9   @Base/show.jl:965  show
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 9   @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  9   @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   3   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    3   @Base/runtime_internals.jl:116  unsorted_names
  3╎    ╎    ╎    ╎    ╎    ╎    ╎     3   @Base/runtime_internals.jl:116  #unsorted_names#6
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   3   @Base/show.jl:625  make_typealias(x::Type)
  2╎    ╎    ╎    ╎    ╎    ╎    ╎    2   @Base/runtime_internals.jl:404  isconst
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/runtime_internals.jl:178  isdeprecated
  2╎    ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/show.jl:626  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:627  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    1   @Base/methodshow.jl:226  show_method(io::IOContext{IOBuffer}, m::Method; modulecolor::Symbol, digit_align_width::Int64)
   ╎    ╎    ╎    ╎     1   @Base/util.jl:141  printstyled
   ╎    ╎    ╎    ╎    ╎ 1   @Base/util.jl:141  #printstyled#835
   ╎    ╎    ╎    ╎    ╎  1   @Base/util.jl:73  with_output_color
   ╎    ╎    ╎    ╎    ╎   1   @Base/util.jl:76  with_output_color(f::Function, color::Symbol, io::IOContext{IOBuffer}, args::String; bold::Bool, italic::Bool, underline::Bool…
   ╎    ╎    ╎    ╎    ╎    1   @Base/iobuffer.jl:128  GenericIOBuffer
   ╎    ╎    ╎    ╎    ╎     1   @Base/iobuffer.jl:137  #IOBuffer#386
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/iobuffer.jl:44  StringMemory
  1╎    ╎    ╎    ╎    ╎    ╎  1   @Base/strings/string.jl:119  unsafe_wrap
   ╎    ╎    ╎    ╎    1   @Base/methodshow.jl:228  show_method(io::IOContext{IOBuffer}, m::Method; modulecolor::Symbol, digit_align_width::Int64)
   ╎    ╎    ╎    ╎     1   @Base/strings/io.jl:254  print
   ╎    ╎    ╎    ╎    ╎ 1   @Base/strings/io.jl:252  write
   ╎    ╎    ╎    ╎    ╎  1   @Base/io.jl:452  unsafe_write
  1╎    ╎    ╎    ╎    ╎   1   @Base/iobuffer.jl:546  unsafe_write(to::IOBuffer, p::Ptr{UInt8}, nb::UInt64)
   ╎    ╎    ╎    ╎    1   @Base/methodshow.jl:229  show_method(io::IOContext{IOBuffer}, m::Method; modulecolor::Symbol, digit_align_width::Int64)
   ╎    ╎    ╎    ╎     1   @Base/show.jl:2754  print_type_bicolor
   ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:2766  print_type_bicolor(io::IOContext{IOBuffer}, str::String; color::Symbol, inner_color::Symbol, use_color::Bool)
   ╎    ╎    ╎    ╎    ╎  1   @Base/strings/string.jl:506  getindex
  1╎    ╎    ╎    ╎    ╎   1   @Base/strings/string.jl:108  _string_n
   ╎    ╎    ╎    ╎    4   @Base/methodshow.jl:234  show_method(io::IOContext{IOBuffer}, m::Method; modulecolor::Symbol, digit_align_width::Int64)
   ╎    ╎    ╎    ╎     4   @Base/methodshow.jl:81  kwarg_decl
  3╎    ╎    ╎    ╎    ╎ 3   @Base/methodshow.jl:83  kwarg_decl(m::Method, kwtype::Nothing)
  1╎    ╎    ╎    ╎    ╎ 1   @Base/methodshow.jl:84  kwarg_decl(m::Method, kwtype::Nothing)
   ╎    ╎    ╎    ╎    18  @Base/methodshow.jl:246  show_method(io::IOContext{IOBuffer}, m::Method; modulecolor::Symbol, digit_align_width::Int64)
   ╎    ╎    ╎    ╎     18  @Base/methodshow.jl:107  show_method_params(io::IOContext{IOBuffer}, tv::Vector{Any})
   ╎    ╎    ╎    ╎    ╎ 18  @Base/show.jl:2826  show(io::IOContext{IOBuffer}, tv::TypeVar)
   ╎    ╎    ╎    ╎    ╎  18  @Base/show.jl:2807  (::Base.var"#show_bound#show##2")(io::IOContext{IOBuffer}, b::Any)
   ╎    ╎    ╎    ╎    ╎   18  @Base/show.jl:965  show(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    10  @Base/show.jl:970  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎     10  @Base/show.jl:805  show_typealias(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:624  make_typealias(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  3   @Base/runtime_internals.jl:116  unsorted_names
  3╎    ╎    ╎    ╎    ╎    ╎   3   @Base/runtime_internals.jl:116  #unsorted_names#6
  5╎    ╎    ╎    ╎    ╎    ╎ 6   @Base/show.jl:625  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎  1   @Base/runtime_internals.jl:404  isconst
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:627  make_typealias(x::Type)
  1╎    ╎    ╎    ╎    ╎    ╎  1   @Base/boot.jl:331  has_free_typevars
   ╎    ╎    ╎    ╎    ╎    8   @Base/show.jl:976  _show_type(io::IOContext{IOBuffer}, x::Type)
   ╎    ╎    ╎    ╎    ╎     8   @Base/show.jl:896  show_unionaliases(io::IOContext{IOBuffer}, x::Union)
  1╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:816  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/show.jl:828  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/runtime_internals.jl:116  unsorted_names
  1╎    ╎    ╎    ╎    ╎    ╎   1   @Base/runtime_internals.jl:116  #unsorted_names#6
  1╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:829  make_typealiases(x::Type)
  2╎    ╎    ╎    ╎    ╎    ╎  2   @Base/runtime_internals.jl:404  isconst
  3╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/show.jl:830  make_typealiases(x::Type)
   ╎    ╎    ╎    ╎    22  @Base/methodshow.jl:254  show_method(io::IOContext{IOBuffer}, m::Method; modulecolor::Symbol, digit_align_width::Int64)
   ╎    ╎    ╎    ╎     22  @Base/errorshow.jl:791  print_module_path_file
   ╎    ╎    ╎    ╎    ╎ 15  @Base/errorshow.jl:801  print_module_path_file(io::IOContext{IOBuffer}, modul::Module, file::String, line::Int32; modulecolor::Symbol, digit_align…
   ╎    ╎    ╎    ╎    ╎  1   @Base/methodshow.jl:138  fixup_stdlib_path
   ╎    ╎    ╎    ╎    ╎   1   @Base/path.jl:394  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎    1   @Base/strings/util.jl:885  split
   ╎    ╎    ╎    ╎    ╎     1   @Base/strings/util.jl:887  #split#429
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/array.jl:729  collect
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/array.jl:742  _collect(cont::UnitRange{Int64}, itr::Base.SplitIterator{String, Regex}, ::Base.HasEltype, isz::Base.SizeUnknown)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/strings/util.jl:720  iterate
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/regex.jl:479  findnext
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/regex.jl:491  _findnext_re(re::Regex, str::String, idx::Int64, match_data::Ptr{Nothing})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/pcre.jl:221  exec_r_data(re::Ptr{Nothing}, subject::String, offset::Int64, options::UInt32)
  1╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/pcre.jl:227  create_match_data
   ╎    ╎    ╎    ╎    ╎  14  @Base/methodshow.jl:139  fixup_stdlib_path
   ╎    ╎    ╎    ╎    ╎   1   @Base/path.jl:392  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎    1   @Base/path.jl:136  isdirpath
   ╎    ╎    ╎    ╎    ╎     1   @Base/regex.jl:306  occursin
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/regex.jl:308  #occursin#455
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/pcre.jl:215  exec_r(re::Ptr{Nothing}, subject::String, offset::Int64, options::UInt32)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/pcre.jl:199  exec
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/pcre.jl:205  _exec
   ╎    ╎    ╎    ╎    ╎   9   @Base/path.jl:394  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎    9   @Base/strings/util.jl:885  split
   ╎    ╎    ╎    ╎    ╎     9   @Base/strings/util.jl:887  #split#429
   ╎    ╎    ╎    ╎    ╎    ╎ 9   @Base/array.jl:729  collect
   ╎    ╎    ╎    ╎    ╎    ╎  2   @Base/array.jl:741  _collect(cont::UnitRange{Int64}, itr::Base.SplitIterator{String, Regex}, ::Base.HasEltype, isz::Base.SizeUnknown)
   ╎    ╎    ╎    ╎    ╎    ╎   2   @Base/array.jl:1300  push!
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/array.jl:1303  _push!
  1╎    ╎    ╎    ╎    ╎    ╎     1   @Base/array.jl:1145  _growend!
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/array.jl:1304  _push!
  1╎    ╎    ╎    ╎    ╎    ╎     1   @Base/essentials.jl:11  length
   ╎    ╎    ╎    ╎    ╎    ╎  7   @Base/array.jl:742  _collect(cont::UnitRange{Int64}, itr::Base.SplitIterator{String, Regex}, ::Base.HasEltype, isz::Base.SizeUnknown)
   ╎    ╎    ╎    ╎    ╎    ╎   6   @Base/strings/util.jl:720  iterate
   ╎    ╎    ╎    ╎    ╎    ╎    6   @Base/regex.jl:479  findnext
  1╎    ╎    ╎    ╎    ╎    ╎     1   @Base/regex.jl:483  _findnext_re(re::Regex, str::String, idx::Int64, match_data::Ptr{Nothing})
   ╎    ╎    ╎    ╎    ╎    ╎     4   @Base/regex.jl:491  _findnext_re(re::Regex, str::String, idx::Int64, match_data::Ptr{Nothing})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 4   @Base/pcre.jl:222  exec_r_data(re::Ptr{Nothing}, subject::String, offset::Int64, options::UInt32)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  4   @Base/pcre.jl:199  exec
  4╎    ╎    ╎    ╎    ╎    ╎    ╎   4   @Base/pcre.jl:205  _exec
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/regex.jl:502  _findnext_re(re::Regex, str::String, idx::Int64, match_data::Ptr{Nothing})
  1╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/pcre.jl:178  free_match_data
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/strings/util.jl:725  iterate
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/strings/substring.jl:49  SubString
  1╎    ╎    ╎    ╎    ╎    ╎     1   @Base/strings/substring.jl:30  SubString{String}(s::String, i::Int64, j::Int64)
   ╎    ╎    ╎    ╎    ╎   1   @Base/path.jl:395  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎    1   @Base/array.jl:2970  filter!(f::Base.Fix2{typeof(!=), String}, a::Vector{SubString{String}})
   ╎    ╎    ╎    ╎    ╎     1   @Base/array.jl:1000  setindex!
  1╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/array.jl:1005  _setindex!
   ╎    ╎    ╎    ╎    ╎   3   @Base/path.jl:414  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎    3   @Base/strings/io.jl:381  join
   ╎    ╎    ╎    ╎    ╎     3   @Base/strings/io.jl:363  _join_preserve_annotations
   ╎    ╎    ╎    ╎    ╎    ╎ 3   @Base/strings/io.jl:110  sprint
  2╎    ╎    ╎    ╎    ╎    ╎  3   @Base/strings/io.jl:117  sprint(::Function, ::Vector{SubString{String}}, ::Vararg{Any}; context::Nothing, sizehint::Int64)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/strings/io.jl:355  join(io::IOBuffer, iterator::Vector{SubString{String}}, delim::String)
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/strings/io.jl:254  print
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/strings/io.jl:252  write
  1╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/iobuffer.jl:532  unsafe_write(to::IOBuffer, p::Ptr{UInt8}, nb::UInt64)
   ╎    ╎    ╎    ╎    ╎ 1   @Base/errorshow.jl:802  print_module_path_file(io::IOContext{IOBuffer}, modul::Module, file::String, line::Int32; modulecolor::Symbol, digit_align…
   ╎    ╎    ╎    ╎    ╎  1   @Base/errorshow.jl:426  stacktrace_expand_basepaths
   ╎    ╎    ╎    ╎    ╎   1   @Base/env.jl:142  get_bool_env
   ╎    ╎    ╎    ╎    ╎    1   @Base/env.jl:142  #get_bool_env#617
   ╎    ╎    ╎    ╎    ╎     1   @Base/env.jl:143  get_bool_env
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/env.jl:144  get_bool_env(f_default::Returns{Bool}, name::String; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}})
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/abstractdict.jl:19  haskey
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/env.jl:171  in
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/env.jl:56  _hasenv
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/env.jl:55  _getenv
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/strings/cstring.jl:85  unsafe_convert
  1╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/strings/cstring.jl:78  containsnul
   ╎    ╎    ╎    ╎    ╎ 3   @Base/errorshow.jl:803  print_module_path_file(io::IOContext{IOBuffer}, modul::Module, file::String, line::Int32; modulecolor::Symbol, digit_align…
   ╎    ╎    ╎    ╎    ╎  1   @Base/path.jl:532  contractuser
  1╎    ╎    ╎    ╎    ╎   1   @Base/path.jl:87  homedir()
   ╎    ╎    ╎    ╎    ╎  2   @Base/path.jl:536  contractuser
   ╎    ╎    ╎    ╎    ╎   1   @Base/path.jl:587  relpath(path::String, startpath::String)
   ╎    ╎    ╎    ╎    ╎    1   @Base/path.jl:459  abspath(a::String)
   ╎    ╎    ╎    ╎    ╎     1   @Base/path.jl:414  normpath(path::String)
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/strings/io.jl:381  join
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/strings/io.jl:363  _join_preserve_annotations
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/strings/io.jl:110  sprint
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/strings/io.jl:110  sprint(::Function, ::Vector{SubString{String}}, ::Vararg{Any}; context::Nothing, sizehint::Int64)
   ╎    ╎    ╎    ╎    ╎   1   @Base/path.jl:588  relpath(path::String, startpath::String)
   ╎    ╎    ╎    ╎    ╎    1   @Base/strings/util.jl:885  split
   ╎    ╎    ╎    ╎    ╎     1   @Base/strings/util.jl:887  #split#429
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/array.jl:729  collect
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/array.jl:740  _collect(cont::UnitRange{Int64}, itr::Base.SplitIterator{String, Regex}, ::Base.HasEltype, isz::Base.SizeUnknown)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/strings/util.jl:719  iterate
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/strings/util.jl:720  iterate
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/regex.jl:479  findnext
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/regex.jl:491  _findnext_re(re::Regex, str::String, idx::Int64, match_data::Ptr{Nothing})
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/pcre.jl:222  exec_r_data(re::Ptr{Nothing}, subject::String, offset::Int64, options::UInt32)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/pcre.jl:199  exec
   ╎    ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/pcre.jl:205  _exec
  1╎    ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/pcre.jl:34  get_local_match_context()
   ╎    ╎    ╎    ╎    ╎ 1   @Base/errorshow.jl:805  print_module_path_file(io::IOContext{IOBuffer}, modul::Module, file::String, line::Int32; modulecolor::Symbol, digit_align…
   ╎    ╎    ╎    ╎    ╎  1   @Base/path.jl:183  dirname
   ╎    ╎    ╎    ╎    ╎   1   @Base/path.jl:151  splitdir
   ╎    ╎    ╎    ╎    ╎    1   @Base/path.jl:157  _splitdir_nodrive(a::String, b::String)
   ╎    ╎    ╎    ╎    ╎     1   @Base/regex.jl:474  match
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/regex.jl:429  match
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/regex.jl:433  match(re::Regex, str::String, idx::Int64, add_opts::UInt32)
  1╎    ╎    ╎    ╎    ╎    ╎   1   @Base/pcre.jl:178  free_match_data
   ╎    ╎    ╎    ╎    ╎ 2   @Base/errorshow.jl:809  print_module_path_file(io::IOContext{IOBuffer}, modul::Module, file::String, line::Int32; modulecolor::Symbol, digit_align…
   ╎    ╎    ╎    ╎    ╎  2   @Base/util.jl:141  printstyled
   ╎    ╎    ╎    ╎    ╎   2   @Base/util.jl:141  #printstyled#835
   ╎    ╎    ╎    ╎    ╎    2   @Base/util.jl:73  with_output_color
   ╎    ╎    ╎    ╎    ╎     1   @Base/util.jl:76  with_output_color(::Function, ::Symbol, ::IOContext{IOBuffer}, ::String, ::Vararg{Any}; bold::Bool, italic::Bool, underline:…
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/iobuffer.jl:128  GenericIOBuffer
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/iobuffer.jl:137  #IOBuffer#386
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/iobuffer.jl:44  StringMemory
  1╎    ╎    ╎    ╎    ╎    ╎    1   @Base/strings/string.jl:119  unsafe_wrap
   ╎    ╎    ╎    ╎    ╎     1   @Base/util.jl:78  with_output_color(::Function, ::Symbol, ::IOContext{IOBuffer}, ::String, ::Vararg{Any}; bold::Bool, italic::Bool, underline:…
   ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/strings/io.jl:46  print(::IOContext{IOBuffer}, ::String, ::String, ::Int32)
   ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/strings/io.jl:35  print(io::IOContext{IOBuffer}, x::Int32)
   ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/show.jl:1265  show
   ╎    ╎    ╎    ╎    ╎    ╎    1   @Base/intfuncs.jl:948  string
   ╎    ╎    ╎    ╎    ╎    ╎     1   @Base/intfuncs.jl:958  string(n::Int32; base::Int64, pad::Int64)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎ 1   @Base/intfuncs.jl:876  dec(x::UInt32, pad::Int64, neg::Bool)
   ╎    ╎    ╎    ╎    ╎    ╎    ╎  1   @Base/iobuffer.jl:44  StringMemory
  1╎    ╎    ╎    ╎    ╎    ╎    ╎   1   @Base/strings/string.jl:119  unsafe_wrap
IanButterworth commented 8 hours ago

Probably https://github.com/JuliaLang/julia/blob/f9765410821dce0f2e5ce8a625fbdf9a52f02462/stdlib/REPL/src/REPLCompletions.jl#L1231

IanButterworth commented 8 hours ago

I'm not great at regexes, but chatgpt made this which works for these test cases

julia> regex = r"^(?!\")(?:\w+\.|)\?\((.*)$"
r"^(?!\")(?:\w+\.|)\?\((.*)$"

julia> match(regex, "?(")
RegexMatch("?(", 1="")

julia> match(regex, "\"?(\"")

julia> match(regex, "\"\"\"?(\"\"\"")

The current one matches all of them

julia> regex = r"(\w+\.|)\?\((.*)$"
r"(\w+\.|)\?\((.*)$"

julia> match(regex, "?(")
RegexMatch("?(", 1="", 2="")

julia> match(regex, "\"?(\"")
RegexMatch("?(\"", 1="", 2="\"")

julia> match(regex, "\"\"\"?(\"\"\"")
RegexMatch("?(\"\"\"", 1="", 2="\"\"\"")
Seelengrab commented 5 hours ago

What it's done here is explicitly exclude (through the negative lookahead (?!\")) strings that start (^) with a quotation mark. It then seems to have surrounded the module capturing group in a non-capturing group ((?: ... )), which probably breaks the code, since that's used by the following code.