Skip to content

Commit

Permalink
add AnnotatedChar support
Browse files Browse the repository at this point in the history
  • Loading branch information
aplavin committed Dec 5, 2024
1 parent 7bbcfdd commit bc4745f
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
8 changes: 7 additions & 1 deletion src/functionlenses.jl
Original file line number Diff line number Diff line change
Expand Up @@ -207,9 +207,15 @@ end

if isdefined(Base, :AnnotatedString)
# 1.11+
using Base: AnnotatedString, annotations
using Base: AnnotatedString, AnnotatedChar, annotations

set(s::AbstractString, ::typeof(annotations), anns) = AnnotatedString(s, anns)
set(s::AnnotatedString, ::typeof(annotations), anns) = AnnotatedString(s.string, anns)
delete(s::AnnotatedString, ::typeof(annotations)) = s.string
insert(s::AbstractString, ::typeof(annotations), anns) = AnnotatedString(s, anns)

set(s::AbstractChar, ::typeof(annotations), anns) = AnnotatedChar(s, anns)
set(s::AnnotatedChar, ::typeof(annotations), anns) = AnnotatedChar(s.char, anns)
delete(s::AnnotatedChar, ::typeof(annotations)) = s.char
insert(s::AbstractChar, ::typeof(annotations), anns) = AnnotatedChar(s, anns)
end
21 changes: 19 additions & 2 deletions test/test_functionlenses.jl
Original file line number Diff line number Diff line change
Expand Up @@ -399,22 +399,39 @@ end
VERSION v"1.11" && @testset "AnnotatedStrings" begin
using Base: AnnotatedChar, AnnotatedString, annotations

s = Base.AnnotatedString("good bad", [(region=1:4, label=:sentiment, value=+1), (region=6:8, label=:sentiment, value=-1)])
s = AnnotatedString("good bad", [(region=1:4, label=:sentiment, value=+1), (region=6:8, label=:sentiment, value=-1)])

@test (@delete annotations(s))::String == "good bad"

snew = @delete annotations(s)[2]
@test String(snew) == "good bad"
@test annotations(snew) == [(region=1:4, label=:sentiment, value=+1)]

snew = (@set Base.annotations(s)[1].region = 2:6)
snew = (@set annotations(s)[1].region = 2:6)
@test String(snew) == "good bad"
@test annotations(snew) == [(region=2:6, label=:sentiment, value=+1), (region=6:8, label=:sentiment, value=-1)]

test_getset_laws((@o annotations(_)[2].region), s, 5:5, 1:3)
test_getset_laws((@o annotations(_)[2].label), s, :abc, :def)
test_getset_laws((@o annotations(_)[2].value), s, "sad", +2)
test_insertdelete_laws((@o annotations(_)[2]), s, (region=2:2, label=:mylabel, value=+1))


c = AnnotatedChar('x', [(label=:level, value="warning"), (label=:alphabet, value=1)])

@test (@delete annotations(c))::Char == 'x'

cnew = @delete annotations(c)[2]
@test Char(cnew) == 'x'
@test annotations(cnew) == [(label=:level, value="warning")]

cnew = (@set annotations(c)[1].label = :severity)
@test Char(cnew) == 'x'
@test annotations(cnew) == [(label=:severity, value="warning"), (label=:alphabet, value=1)]

test_getset_laws((@o annotations(_)[2].label), c, :abc, :def)
test_getset_laws((@o annotations(_)[1].value), c, 5, "bad")
test_insertdelete_laws((@o annotations(_)[2]), c, (label=:mylabel, value=+1))
end

@testset "custom binary function" begin
Expand Down

0 comments on commit bc4745f

Please sign in to comment.