JuliaLang / JuliaSyntax.jl

The Julia compiler frontend
Other
272 stars 35 forks source link

parse! with an IOBuffer errors on Julia 1.11-rc1 #443

Open davidanthoff opened 3 months ago

davidanthoff commented 3 months ago

Here is the repo:

using JuliaSyntax

source = "println()"

JuliaSyntax.parse!(SyntaxNode, IOBuffer(source))

generates an error

ERROR: MethodError: no method matching JuliaSyntax.ParseStream(::Memory{UInt8}, ::IOBuffer, ::Int64, ::VersionNumber)
The type `JuliaSyntax.ParseStream` exists, but no method is defined for this combination of argument types when trying to construct it.

Closest candidates are:
  JuliaSyntax.ParseStream(::Vector{UInt8}, ::Any, ::Integer, ::VersionNumber)
   @ JuliaSyntax C:\Users\david\.julia\packages\JuliaSyntax\eqCSU\src\parse_stream.jl:265
  JuliaSyntax.ParseStream(::Ptr{UInt8}, ::Integer, ::Integer; version)
   @ JuliaSyntax C:\Users\david\.julia\packages\JuliaSyntax\eqCSU\src\parse_stream.jl:298
  JuliaSyntax.ParseStream(::Vector{UInt8}; ...)
   @ JuliaSyntax C:\Users\david\.julia\packages\JuliaSyntax\eqCSU\src\parse_stream.jl:293
  ...

Stacktrace:
 [1] JuliaSyntax.ParseStream(io::IOBuffer; version::VersionNumber)
   @ JuliaSyntax C:\Users\david\.julia\packages\JuliaSyntax\eqCSU\src\parse_stream.jl:318
 [2] parse!(::Type{SyntaxNode}, io::IOBuffer; rule::Symbol, version::VersionNumber, kws::@Kwargs{})
   @ JuliaSyntax C:\Users\david\.julia\packages\JuliaSyntax\eqCSU\src\parser_api.jl:70
 [3] parse!(::Type{SyntaxNode}, io::IOBuffer)
   @ JuliaSyntax C:\Users\david\.julia\packages\JuliaSyntax\eqCSU\src\parser_api.jl:68
 [4] top-level scope
   @ REPL[6]:1

I'm wondering, though, whether the root cause here is some breaking change in Julia itself?

KristofferC commented 3 months ago

I'm wondering, though, whether the root cause here is some breaking change in Julia itself?

Nah, it grabs the internal .data field and assumes it is a Vector{UInt8}:

https://github.com/JuliaLang/JuliaSyntax.jl/blob/3bf262bba32e833ed6d0d59a455a62faee97b408/src/parse_stream.jl#L318

davidanthoff commented 3 months ago

@c42f could we add a parse! version that accepts a String? It seems that ParseStream already supports constructors that accept that, so that seems a very simple solution here, as I'm starting with a String in any case?