Julia: "MethodError: no method matching iterate(::Symbol)" during tab-completion

Created on 3 Jun 2020  ยท  2Comments  ยท  Source: JuliaLang/julia

ZMQ.jl's Message type breaks tab completion:

using ZMQ
z = ZMQ.Message()
z.<TAB>

results in:

julia> z.โ”Œ Error: Error in the keymap
โ”‚   exception =
โ”‚    MethodError: no method matching iterate(::Symbol)
โ”‚    Closest candidates are:
โ”‚      iterate(::Base.EnvDict) at env.jl:119
โ”‚      iterate(::Base.EnvDict, ::Any) at env.jl:119
โ”‚      iterate(::ExponentialBackOff) at error.jl:252
โ”‚      ...
โ”‚    Stacktrace:
โ”‚     [1] complete_symbol(::String, ::REPL.REPLCompletions.var"#21#25", ::Module) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/REPLCompletions.jl:147
โ”‚     [2] completions(::String, ::Int64, ::Module) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/REPLCompletions.jl:716
โ”‚     [3] completions(::String, ::Int64) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/REPLCompletions.jl:580
โ”‚     [4] complete_line(::REPL.REPLCompletionProvider, ::Any) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:462
โ”‚     [5] complete_line(::REPL.LineEdit.PromptState, ::Any) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:329
โ”‚     [6] complete_line(::REPL.LineEdit.MIState) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:320
โ”‚     [7] edit_tab(::REPL.LineEdit.MIState, ::Any, ::Any) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2032 (repeats 2 times)
โ”‚     [8] (::REPL.LineEdit.var"#109#162")(::Any, ::Any, ::Vararg{Any,N} where N) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2073
โ”‚     [9] #invokelatest#1 at ./essentials.jl:710 [inlined]
โ”‚     [10] invokelatest at ./essentials.jl:709 [inlined]
โ”‚     [11] (::REPL.LineEdit.var"#22#23"{REPL.LineEdit.var"#109#162",String})(::Any, ::Any) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:1364
โ”‚     [12] prompt!(::REPL.Terminals.TextTerminal, ::REPL.LineEdit.ModalInterface, ::REPL.LineEdit.MIState) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2446
โ”‚     [13] run_interface(::REPL.Terminals.TextTerminal, ::REPL.LineEdit.ModalInterface, ::REPL.LineEdit.MIState) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2349
โ”‚     [14] run_frontend(::REPL.LineEditREPL, ::REPL.REPLBackendRef) at /Users/sabae/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:1141
โ”‚     [15] (::REPL.var"#36#40"{REPL.LineEditREPL,REPL.REPLBackendRef})() at ./task.jl:358
โ”” @ REPL.LineEdit ~/tmp/julia-build/julia-master/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2448

This is happening consistently on Julia v1.4, v1.5 and latest master. The version of ZMQ installed is v1.2.0.

REPL error handling error messages

Most helpful comment

The REPL should be robust to this, I think.

All 2 comments

I'd guess this is a ZMQ bug:

https://github.com/JuliaInterop/ZMQ.jl/blob/a65c423dcd6fa1136e6150cf488956abfbebd2ca/src/message.jl#L145

Base.propertynames(zmsg::Message) = (:more)

That is missing a comma. It should return a tuple.

The REPL should be robust to this, I think.

Was this page helpful?
0 / 5 - 0 ratings