Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

change skipchars(io, predicate) to skipchars(predicate, io) #25667

Merged
merged 1 commit into from
Jan 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -692,6 +692,9 @@ Deprecated or removed

* `nb_available` is now `bytesavailable` ([#25634]).

* `skipchars(io::IO, predicate; linecomment=nothing)` is deprecated in favor of
`skipchars(predicate, io::IO; linecomment=nothing)` ([#25667]).

* `Bidiagonal` constructors now use a `Symbol` (`:U` or `:L`) for the upper/lower
argument, instead of a `Bool` or a `Char` ([#22703]).

Expand Down
4 changes: 4 additions & 0 deletions base/deprecated.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1592,6 +1592,10 @@ end

@deprecate nb_available bytesavailable

@deprecate skipchars(io::IO, predicate; linecomment=nothing) skipchars(predicate, io, linecomment=linecomment)
# this method is to avoid ambiguity, delete at the same time as deprecation of skipchars above:
skipchars(::IO, ::IO; linecomment=nothing) = throw(ArgumentError("the first argument of `skipchars` must be callable"))

# issue #9053
if Sys.iswindows()
function Filesystem.tempname(uunique::UInt32)
Expand Down
8 changes: 4 additions & 4 deletions base/io.jl
Original file line number Diff line number Diff line change
Expand Up @@ -912,7 +912,7 @@ Commit all currently buffered writes to the given stream.
flush(io::IO) = nothing

"""
skipchars(io::IO, predicate; linecomment=nothing)
skipchars(predicate, io::IO; linecomment=nothing)

Advance the stream `io` such that the next-read character will be the first remaining for
which `predicate` returns `false`. If the keyword argument `linecomment` is specified, all
Expand All @@ -923,19 +923,19 @@ characters from that character until the start of the next line are ignored.
julia> buf = IOBuffer(" text")
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=8, maxsize=Inf, ptr=1, mark=-1)

julia> skipchars(buf, isspace)
julia> skipchars(isspace, buf)
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=8, maxsize=Inf, ptr=5, mark=-1)

julia> String(readavailable(buf))
"text"
```
"""
function skipchars(io::IO, pred; linecomment=nothing)
function skipchars(predicate, io::IO; linecomment=nothing)
while !eof(io)
c = read(io, Char)
if c === linecomment
readline(io)
elseif !pred(c)
elseif !predicate(c)
skip(io, -codelen(c))
break
end
Expand Down
2 changes: 1 addition & 1 deletion base/repl/LineEdit.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1037,7 +1037,7 @@ end

function edit_replace_word_right(buf::IOBuffer, replace::Function)
# put the cursor at the beginning of the next word
skipchars(buf, is_non_word_char)
skipchars(is_non_word_char, buf)
b = position(buf)
char_move_word_right(buf)
e = position(buf)
Expand Down
12 changes: 6 additions & 6 deletions test/iobuffer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -262,25 +262,25 @@ end
# skipchars
let
io = IOBuffer("")
@test eof(skipchars(io, isspace))
@test eof(skipchars(isspace, io))

io = IOBuffer(" ")
@test eof(skipchars(io, isspace))
@test eof(skipchars(isspace, io))

io = IOBuffer("# \n ")
@test eof(skipchars(io, isspace, linecomment='#'))
@test eof(skipchars(isspace, io, linecomment='#'))

io = IOBuffer(" text")
skipchars(io, isspace)
skipchars(isspace, io)
@test String(readavailable(io)) == "text"

io = IOBuffer(" # comment \n text")
skipchars(io, isspace, linecomment='#')
skipchars(isspace, io, linecomment='#')
@test String(readavailable(io)) == "text"

for char in ['@','߷','࿊','𐋺']
io = IOBuffer("alphabeticalstuff$char")
@test !eof(skipchars(io, isalpha))
@test !eof(skipchars(isalpha, io))
@test read(io, Char) == char
end
end
Expand Down
12 changes: 6 additions & 6 deletions test/iostream.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,31 @@ mktemp() do path, file
end

# test it doesn't error on eof
@test eof(skipchars(file, isspace))
@test eof(skipchars(isspace, file))

# test it correctly skips
append_to_file(" ")
@test eof(skipchars(file, isspace))
@test eof(skipchars(isspace, file))

# test it correctly detects comment lines
append_to_file("# \n ")
@test eof(skipchars(file, isspace, linecomment='#'))
@test eof(skipchars(isspace, file, linecomment='#'))

# test it stops at the appropriate time
append_to_file(" not a space")
@test !eof(skipchars(file, isspace))
@test !eof(skipchars(isspace, file))
@test read(file, Char) == 'n'

# test it correctly ignores the contents of comment lines
append_to_file(" #not a space \n not a space")
@test !eof(skipchars(file, isspace, linecomment='#'))
@test !eof(skipchars(isspace, file, linecomment='#'))
@test read(file, Char) == 'n'

# test it correctly handles unicode
for (byte,char) in zip(1:4, ('@','߷','࿊','𐋺'))
append_to_file("abcdef$char")
@test Base.codelen(char) == byte
@test !eof(skipchars(file, isalpha))
@test !eof(skipchars(isalpha, file))
@test read(file, Char) == char
end
end
Expand Down