Skip to content

Commit 0edc602

Browse files
authored
Merge pull request #400 from julia-vscode/sp/some-fixes
fix: get tests passing
2 parents e8b3650 + 3333ba6 commit 0edc602

File tree

10 files changed

+63
-12
lines changed

10 files changed

+63
-12
lines changed

src/components/internals.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ function parse_importexport_item(ps, is_colon = false)
392392
pushtotrivia!(a, accept_rparen(ps))
393393
a
394394
elseif kindof(ps.nt) === Tokens.EX_OR
395-
parse_unary(ps, INSTANCE(next(ps)))
395+
@closer ps :ws parse_unary(ps, INSTANCE(next(ps)))
396396
elseif !is_colon && isoperator(ps.nt)
397397
next(ps)
398398
EXPR(:OPERATOR, ps.nt.startbyte - ps.t.startbyte, 1 + ps.t.endbyte - ps.t.startbyte, val(ps.t, ps))

src/components/operators.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,8 +414,14 @@ function parse_operator_dot(ps::ParseState, ret::EXPR, op::EXPR)
414414

415415
if isidentifier(nextarg) || isinterpolant(nextarg)
416416
ret = EXPR(op, EXPR[ret, EXPR(:quotenode, EXPR[nextarg], nothing)], nothing)
417-
elseif headof(nextarg) === :vect || headof(nextarg) === :braces
417+
elseif headof(nextarg) === :vect
418418
ret = EXPR(op, EXPR[ret, EXPR(:quote, EXPR[nextarg], nothing)], nothing)
419+
elseif headof(nextarg) === :braces
420+
@static if VERSION >= v"1.12-"
421+
ret = EXPR(op, EXPR[ret, EXPR(:quotenode, EXPR[nextarg], nothing)], nothing)
422+
else
423+
ret = EXPR(op, EXPR[ret, EXPR(:quote, EXPR[nextarg], nothing)], nothing)
424+
end
419425
elseif headof(nextarg) === :macrocall
420426
ret = rewrite_macrocall_quotenode(op, ret, nextarg)
421427
elseif VERSION >= v"1.8.0-" && headof(nextarg) === :do && headof(nextarg.args[1]) === :macrocall

src/lexer.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ mutable struct Closer
2727
end
2828
Closer() = Closer(true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, -1)
2929

30+
function Base.show(io::IO, c::Closer)
31+
println(io, "Closer(")
32+
for f in fieldnames(Closer)
33+
println(io, " ", f, " = ", getfield(c, f), ",")
34+
end
35+
print(io, ")")
36+
end
37+
3038
const IOT = typeof(IOBuffer().data)
3139
mutable struct ParseState
3240
l::Lexer{Base.GenericIOBuffer{IOT},RawToken}

src/utils.jl

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,33 @@ function closer(ps::ParseState)
4545
!(!ps.closer.inmacro && kindof(ps.nt) === Tokens.FOR) &&
4646
!(kindof(ps.nt) === Tokens.DO) &&
4747
!(
48-
(isbinaryop(ps.nt) && !(ps.closer.wsop && isemptyws(ps.nws) && isunaryop(ps.nt) && precedence(ps.nt) > 7)) ||
49-
(isunaryop(ps.t) && kindof(ps.ws) == WS && kindof(ps.lt) !== CSTParser.Tokens.COLON)
50-
)) ||
51-
(ps.closer.unary && (kindof(ps.t) in (Tokens.INTEGER, Tokens.FLOAT, Tokens.RPAREN, Tokens.RSQUARE, Tokens.RBRACE) && isidentifier(ps.nt)))
48+
(
49+
isbinaryop(ps.nt) && (
50+
!(
51+
ps.closer.wsop &&
52+
isemptyws(ps.nws) &&
53+
isunaryop(ps.nt) &&
54+
precedence(ps.nt) > 7
55+
)
56+
)
57+
) || (
58+
isunaryop(ps.t) &&
59+
kindof(ps.ws) == WS &&
60+
kindof(ps.lt) !== CSTParser.Tokens.COLON
61+
)
62+
)
63+
) ||
64+
(
65+
ps.closer.unary && (
66+
kindof(ps.t) in (
67+
Tokens.INTEGER,
68+
Tokens.FLOAT,
69+
Tokens.RPAREN,
70+
Tokens.RSQUARE,
71+
Tokens.RBRACE
72+
) && isidentifier(ps.nt)
73+
)
74+
)
5275
end
5376

5477
"""

test/parser/test_keyword_blocks.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,9 @@ end
159159
@test "for outer i = 1:3 end" |> test_expr
160160
if VERSION >= v"1.6"
161161
@test "for outer \$i = 1:3 end" |> test_expr
162-
@test "for outer \$ i = 1:3 end" |> test_expr
162+
if VERSION < v"1.12-"
163+
@test "for outer \$ i = 1:3 end" |> test_expr
164+
end
163165
end
164166
end
165167
end

test/parser/test_operators.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ end
6969
@test "3//a^b" |> test_expr
7070
@test "3^b//a^b" |> test_expr
7171
@test "3^b//a" |> test_expr
72+
@test_broken "@a b ^ -c(d)^e" |> test_expr
73+
@test_broken "[a b ^ -c(d)^e f]" |> test_expr
7274
@test "a::b..." |> test_expr
7375
@test "a where b..." |> test_expr
7476
@test "a.b..." |> test_expr

test/parser/test_parser.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,7 @@ end
676676
@test CSTParser.parse("using a as b")[2].head === :errortoken
677677
@test test_expr("using M: a as b")
678678
@test test_expr("using M: a as b, c")
679+
@test test_expr(raw":(import $foo as $bar)")
679680
end
680681
end
681682
@testitem "exor #201" begin

test/parser/test_square.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
@test traverse(CSTParser.parse("[\"hi\"\""))
1616
@test traverse(CSTParser.parse("[\"hi\"\"\n"))
1717
@test traverse(CSTParser.parse("[(1,2,3])"))
18+
19+
@test "[2.0^53 2.0^53+2]" |> test_expr
1820
end
1921

2022
@testitem "ref" begin

test/test_check_base.jl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,21 +154,24 @@
154154

155155
if cst_err || meta_err
156156
if cst_err && !meta_err
157-
@error "CSTParser.parse errored, but Meta.parse didn't." file = file
157+
@error "CSTParser.parse errored, but Meta.parse didn't." file
158158
elseif !cst_err && meta_err
159-
@error "Meta.parse errored, but CSTParser.parse didn't." file = file
159+
@error "Meta.parse errored, but CSTParser.parse didn't." file
160160
end
161+
@test false
161162
else
162163
if cst_expr == meta_expr
163164
@test true
164165
else
165166
@error "parsing difference" file = file
166-
_compare(cst_expr, meta_expr)
167+
# _compare(cst_expr, meta_expr)
167168
# 1.10 introduced a bunch of changes to the canonical AST, which
168169
# CSTParser does not support right now. This does not mean that we
169170
# cannot parse that file though, just that Expr conversion doesn't
170171
# work well
171-
if v"1.10-" <= VERSION < v"1.12-" && basename(file) == "syntax.jl"
172+
if v"1.10-" <= VERSION < v"1.13-" && basename(file) == "syntax.jl"
173+
@test_broken false
174+
elseif VERSION >= v"1.12-"
172175
@test_broken false
173176
else
174177
@test false

test/test_spec.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@ end
9191
include("shared.jl")
9292

9393
test_expr("f(a=1)", :call, 4, false)
94-
test_expr("f(::typeof(a)=1)", :call, 4, false)
94+
if VERSION <= v"1.12-"
95+
# currently broken due to JuliaSyntax inserting a begin-end block
96+
# on the RHS of the kwarg
97+
test_expr("f(::typeof(a)=1)", :call, 4, false)
98+
end
9599
test_expr("f(a::typeof(a)=1)", :call, 4, false)
96100
test_expr("f(::a=1)", :call, 4, false)
97101
test_expr("f(a::a=1)", :call, 4, false)

0 commit comments

Comments
 (0)