JuliaSyntax.jl icon indicating copy to clipboard operation
JuliaSyntax.jl copied to clipboard

parse! with an IOBuffer errors on Julia 1.11-rc1

Open davidanthoff opened this issue 1 year ago • 2 comments

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?

davidanthoff avatar Jun 30 '24 12:06 davidanthoff

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

KristofferC avatar Jun 30 '24 13:06 KristofferC

@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?

davidanthoff avatar Jun 30 '24 17:06 davidanthoff