Skip to content

Commit c58ea42

Browse files
authored
first_line support in parse (#200)
1 parent 764597a commit c58ea42

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

src/parser_api.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ struct ParseError <: Exception
99
diagnostics::Vector{Diagnostic}
1010
end
1111

12-
function ParseError(stream::ParseStream; filename=nothing)
13-
source = SourceFile(sourcetext(stream), filename=filename)
12+
function ParseError(stream::ParseStream; kws...)
13+
source = SourceFile(sourcetext(stream); kws...)
1414
ParseError(source, stream.diagnostics)
1515
end
1616

@@ -72,7 +72,7 @@ function parse!(::Type{TreeType}, io::IO;
7272
end
7373

7474
function _parse(rule::Symbol, need_eof::Bool, ::Type{T}, text, index=1; version=VERSION,
75-
ignore_trivia=true, filename=nothing, ignore_errors=false,
75+
ignore_trivia=true, filename=nothing, first_line=1, ignore_errors=false,
7676
ignore_warnings=ignore_errors) where {T}
7777
stream = ParseStream(text, index; version=version)
7878
if ignore_trivia && rule != :toplevel
@@ -88,14 +88,14 @@ function _parse(rule::Symbol, need_eof::Bool, ::Type{T}, text, index=1; version=
8888
end
8989
if (!ignore_errors && any_error(stream.diagnostics)) ||
9090
(!ignore_warnings && !isempty(stream.diagnostics))
91-
throw(ParseError(stream, filename=filename))
91+
throw(ParseError(stream, filename=filename, first_line=first_line))
9292
end
9393
# TODO: Figure out a more satisfying solution to the wrap_toplevel_as_kind
9494
# mess that we've got here.
9595
# * It's kind of required for GreenNode, as GreenNode only records spans,
9696
# not absolute positions.
9797
# * Dropping it would be ok for SyntaxNode and Expr...
98-
tree = build_tree(T, stream; wrap_toplevel_as_kind=K"toplevel", filename=filename)
98+
tree = build_tree(T, stream; wrap_toplevel_as_kind=K"toplevel", filename=filename, first_line=first_line)
9999
tree, last_byte(stream) + 1
100100
end
101101

src/syntax_tree.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,9 @@ function Base.push!(node::SyntaxNode, child::SyntaxNode)
214214
push!(args, child)
215215
end
216216

217-
function build_tree(::Type{SyntaxNode}, stream::ParseStream; filename=nothing, kws...)
217+
function build_tree(::Type{SyntaxNode}, stream::ParseStream; filename=nothing, first_line=1, kws...)
218218
green_tree = build_tree(GreenNode, stream; kws...)
219-
source = SourceFile(sourcetext(stream), filename=filename)
219+
source = SourceFile(sourcetext(stream), filename=filename, first_line=first_line)
220220
SyntaxNode(source, green_tree, first_byte(stream))
221221
end
222222

test/parser_api.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
@test parse(Expr, "[a ;; b]", version=v"1.7") == Expr(:ncat, 2, :a, :b)
2828

2929
# filename
30-
@test JuliaSyntax.parse(Expr, "begin\na\nend", filename="foo.jl") ==
31-
Expr(:block, LineNumberNode(2, Symbol("foo.jl")), :a)
30+
@test JuliaSyntax.parse(Expr, "begin\na\nend", filename="foo.jl", first_line=55) ==
31+
Expr(:block, LineNumberNode(56, Symbol("foo.jl")), :a)
3232

3333
# ignore_trivia
3434
@test parseatom(Expr, " x ", ignore_trivia=true) == :x

0 commit comments

Comments
 (0)