419
419
@testset " interpolation" begin
420
420
@testset " basic" begin
421
421
str = " \"\$ x \$ y\" "
422
- ts = collect (tokenize (str))
422
+ ts = collect (tokenize (str))
423
423
@test ts[1 ] ~ (K "\" " , " \" " , str)
424
424
@test ts[2 ] ~ (K " $" , " \$ " , str)
425
425
@test ts[3 ] ~ (K " Identifier" , " x" , str)
461
461
462
462
@testset " duplicate \$ " begin
463
463
str = " \"\$\$\" "
464
- ts = collect (tokenize (str))
464
+ ts = collect (tokenize (str))
465
465
@test ts[1 ] ~ (K "\" " , " \" " , str)
466
466
@test ts[2 ] ~ (K " $" , " \$ " , str)
467
467
@test ts[3 ] ~ (K " $" , " \$ " , str)
472
472
@testset " Unmatched parens" begin
473
473
# issue 73: https://github.com/JuliaLang/Tokenize.jl/issues/73
474
474
str = " \"\$ (fdsf\" "
475
- ts = collect (tokenize (str))
475
+ ts = collect (tokenize (str))
476
476
@test ts[1 ] ~ (K "\" " , " \" " , str)
477
477
@test ts[2 ] ~ (K " $" , " \$ " , str)
478
478
@test ts[3 ] ~ (K " (" , " (" , str)
484
484
@testset " Unicode" begin
485
485
# issue 178: https://github.com/JuliaLang/Tokenize.jl/issues/178
486
486
str = """ "\$ uₕx \$ (uₕx - ux)" """
487
- ts = collect (tokenize (str))
487
+ ts = collect (tokenize (str))
488
488
@test ts[ 1 ] ~ (K " Whitespace" , " " , str)
489
489
@test ts[ 2 ] ~ (K "\" " , " \" " , str)
490
490
@test ts[ 3 ] ~ (K " $" , " \$ " , str)
505
505
506
506
@testset " var\" ...\" disabled in interpolations" begin
507
507
str = """ "\$ var"x" " """
508
- ts = collect (tokenize (str))
508
+ ts = collect (tokenize (str))
509
509
@test ts[ 1 ] ~ (K " Whitespace" , " " , str)
510
510
@test ts[ 2 ] ~ (K "\" " , " \" " , str)
511
511
@test ts[ 3 ] ~ (K " $" , " \$ " , str)
@@ -519,14 +519,30 @@ end
519
519
@test ts[11 ] ~ (K " EndMarker" , " " , str)
520
520
end
521
521
522
- @testset " invalid chars after identifier" begin
523
- str = """ "\$ x෴" """
524
- ts = collect (tokenize (str))
525
- @test ts[4 ] ~ (K " Identifier" , " x" , str)
526
- @test ts[5 ] ~ (K " ErrorInvalidInterpolationTerminator" , " " , str)
527
- @test ts[6 ] ~ (K " String" , " ෴" , str)
528
- @test is_error (ts[5 ]. kind)
529
- @test ts[5 ]. kind == K " ErrorInvalidInterpolationTerminator"
522
+ @testset " chars after interpolation identifier" begin
523
+ # Operators allowed
524
+ @test toks (" \"\$ x?\" " ) == [
525
+ " \" " => K "\" "
526
+ " \$ " => K " $"
527
+ " x" => K " Identifier"
528
+ " ?" => K " String"
529
+ " \" " => K "\" "
530
+ ]
531
+ @test toks (" \"\$ x⫪\" " ) == [
532
+ " \" " => K "\" "
533
+ " \$ " => K " $"
534
+ " x" => K " Identifier"
535
+ " ⫪" => K " String"
536
+ " \" " => K "\" "
537
+ ]
538
+ # Some chars disallowed (eg, U+0DF4)
539
+ @test toks (" \"\$ x෴\" " ) == [
540
+ " \" " => K "\" "
541
+ " \$ " => K " $"
542
+ " x" => K " Identifier"
543
+ " ෴" => K " ErrorInvalidInterpolationTerminator"
544
+ " \" " => K "\" "
545
+ ]
530
546
end
531
547
end
532
548
635
651
@test toks (" 3e2_2" ) == [" 3e2" => K " Float" , " _2" => K " Identifier" ]
636
652
@test toks (" 1e" ) == [" 1" => K " Integer" , " e" => K " Identifier" ]
637
653
638
- @test toks (" 1.:0" ) == [" 1." => K " Float" , " :" => K " :" , " 0" => K " Integer" ]
639
-
640
654
# Floating point with \minus rather than -
641
655
@test onlytok (" 1.0e−0" ) == K " Float"
642
656
@test onlytok (" 1.0f−0" ) == K " Float32"
@@ -681,11 +695,23 @@ end
681
695
" f" => K " Identifier" , " (" => K " (" , " a" => K " Identifier" , " )" => K " )" ]
682
696
@test toks (" 1f0./1" ) == [" 1f0" => K " Float32" , " ./" => K " /" , " 1" => K " Integer" ]
683
697
698
+ # Dotted operators after numeric constants are ok
699
+ @test toks (" 1e1.⫪" ) == [" 1e1" => K " Float" , " .⫪" => K " ⫪" ]
700
+ @test toks (" 1.1.⫪" ) == [" 1.1" => K " Float" , " .⫪" => K " ⫪" ]
701
+ @test toks (" 1e1.−" ) == [" 1e1" => K " Float" , " .−" => K " -" ]
702
+ @test toks (" 1.1.−" ) == [" 1.1" => K " Float" , " .−" => K " -" ]
703
+ # Non-dottable operators are not ok
704
+ @test toks (" 1e1.\$ " ) == [" 1e1." => K " ErrorInvalidNumericConstant" , " \$ " => K " $" ]
705
+ @test toks (" 1.1.\$ " ) == [" 1.1." => K " ErrorInvalidNumericConstant" , " \$ " => K " $" ]
706
+
684
707
# Ambiguous dotted operators
685
708
@test toks (" 1.+" ) == [" 1." => K " ErrorAmbiguousNumericConstant" , " +" => K " +" ]
686
709
@test toks (" 1.+ " ) == [" 1." => K " ErrorAmbiguousNumericConstant" , " +" => K " +" , " " => K " Whitespace" ]
687
710
@test toks (" 1.⤋" ) == [" 1." => K " ErrorAmbiguousNumericConstant" , " ⤋" => K " ⤋" ]
688
- @test toks (" 1.?" ) == [" 1." => K " ErrorAmbiguousNumericConstant" , " ?" => K " ?" ]
711
+ @test toks (" 1.⫪" ) == [" 1." => K " ErrorAmbiguousNumericConstant" , " ⫪" => K " ⫪" ]
712
+ # non-dottable ops are the exception
713
+ @test toks (" 1.:" ) == [" 1." => K " Float" , " :" => K " :" ]
714
+ @test toks (" 1.\$ " ) == [" 1." => K " Float" , " \$ " => K " $" ]
689
715
690
716
# Ambiguous - literal vs multiply by juxtaposition
691
717
@test toks (" 1.x" ) == [" 1." => K " ErrorAmbiguousNumericDotMultiply" , " x" => K " Identifier" ]
846
872
raw " ^ ↑ ↓ ⇵ ⟰ ⟱ ⤈ ⤉ ⤊ ⤋ ⤒ ⤓ ⥉ ⥌ ⥍ ⥏ ⥑ ⥔ ⥕ ⥘ ⥙ ⥜ ⥝ ⥠ ⥡ ⥣ ⥥ ⥮ ⥯ ↑ ↓"
847
873
raw " ::"
848
874
raw " ."
875
+ " ⫪ ⫫"
876
+ " \u 00b7 \u 0387"
849
877
]
850
878
if VERSION >= v " 1.6.0"
851
879
push! (ops, raw " <-- <-->" )
0 commit comments