From 11175059bda6852253bbfd20006afc29eb76c020 Mon Sep 17 00:00:00 2001 From: Fredrik Ekre Date: Tue, 10 Jul 2018 04:45:21 +0200 Subject: [PATCH] Upgrade to Julia v0.7 (#14) --- .gitignore | 3 ++- .travis.yml | 17 ++++++----------- Project.toml | 11 +++++++++++ REQUIRE | 3 +-- appveyor.yml | 18 +++++++++--------- docs/make.jl | 10 +++++----- docs/src/outputformats.md | 7 +++++-- examples/example.jl | 2 +- src/Documenter.jl | 22 +++------------------- src/IJulia.jl | 3 +-- src/Literate.jl | 28 +++++++++++++++++++--------- test/coverage.jl | 6 ++++++ test/runtests.jl | 8 +++----- 13 files changed, 72 insertions(+), 66 deletions(-) create mode 100644 Project.toml create mode 100644 test/coverage.jl diff --git a/.gitignore b/.gitignore index 8ee819d..0b5f155 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.jl.cov *.jl.*.cov *.jl.mem -*.DS_Store \ No newline at end of file +*.DS_Store +Manifest.toml diff --git a/.travis.yml b/.travis.yml index 189df88..604889b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,13 +4,11 @@ os: - linux - osx julia: - - 0.6 - 0.7 - nightly -matrix: - allow_failures: - - julia: nightly - - julia: 0.7 +# matrix: +# allow_failures: +# - julia: nightly branches: only: - master @@ -18,16 +16,13 @@ branches: jobs: include: - stage: deploy - julia: 0.6 + julia: nightly os: linux script: - - julia -e 'Pkg.clone(pwd()); Pkg.build("Literate")' - - julia -e 'Pkg.add("Documenter"); Pkg.add("Plots"); Pkg.build("Plots")' - - julia -e 'cd(Pkg.dir("Literate")); include("docs/make.jl")' + - julia docs/make.jl notifications: email: false git: depth: 99999999 after_success: - # push coverage results to Codecov - - julia -e 'cd(Pkg.dir("Literate")); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())' + - julia test/coverage.jl diff --git a/Project.toml b/Project.toml new file mode 100644 index 0000000..a0d42e1 --- /dev/null +++ b/Project.toml @@ -0,0 +1,11 @@ +name = "Literate" +uuid = "98b081ad-f1c9-55d3-8b20-4c87d4299306" +version = "0.2.2" + +[deps] +Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[targets.test.deps] +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/REQUIRE b/REQUIRE index d4895a9..744f9c1 100644 --- a/REQUIRE +++ b/REQUIRE @@ -1,3 +1,2 @@ -julia 0.6 +julia 0.7.0-alpha JSON -Compat diff --git a/appveyor.yml b/appveyor.yml index 2c14a8b..3ab996d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,14 +1,15 @@ environment: + JULIA_PROJECT: "@." matrix: - - JULIA_URL: "https://julialang-s3.julialang.org/bin/winnt/x86/0.6/julia-0.6-latest-win32.exe" - - JULIA_URL: "https://julialang-s3.julialang.org/bin/winnt/x64/0.6/julia-0.6-latest-win64.exe" + - JULIA_URL: "https://julialang-s3.julialang.org/bin/winnt/x86/0.7/julia-0.7-latest-win32.exe" + - JULIA_URL: "https://julialang-s3.julialang.org/bin/winnt/x64/0.7/julia-0.7-latest-win64.exe" - JULIA_URL: "https://julialangnightlies-s3.julialang.org/bin/winnt/x86/julia-latest-win32.exe" - JULIA_URL: "https://julialangnightlies-s3.julialang.org/bin/winnt/x64/julia-latest-win64.exe" -matrix: - allow_failures: - - JULIA_URL: "https://julialangnightlies-s3.julialang.org/bin/winnt/x86/julia-latest-win32.exe" - - JULIA_URL: "https://julialangnightlies-s3.julialang.org/bin/winnt/x64/julia-latest-win64.exe" +# matrix: +# allow_failures: +# - JULIA_URL: "https://julialangnightlies-s3.julialang.org/bin/winnt/x86/julia-latest-win32.exe" +# - JULIA_URL: "https://julialangnightlies-s3.julialang.org/bin/winnt/x64/julia-latest-win64.exe" branches: only: @@ -38,8 +39,7 @@ install: build_script: # Need to convert from shallow to complete for Pkg.clone to work - IF EXIST .git\shallow (git fetch --unshallow) - - C:\projects\julia\bin\julia -e "versioninfo(); - Pkg.clone(pwd(), \"Literate\"); Pkg.build(\"Literate\")" + - C:\projects\julia\bin\julia -e "using InteractiveUtils; versioninfo(); Pkg.build()" test_script: - - C:\projects\julia\bin\julia -e "Pkg.test(\"Literate\")" + - C:\projects\julia\bin\julia -e "Pkg.test()" diff --git a/docs/make.jl b/docs/make.jl index e7cd5df..b3b7284 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,10 +1,10 @@ +using Pkg +pkg"add Documenter Plots#master GR#master" +pkg"precompile" + using Documenter using Literate -# import these to make sure they precompile here instead of when generating output -import Plots -import GR - # generate examples EXAMPLE = joinpath(@__DIR__, "..", "examples", "example.jl") OUTPUT = joinpath(@__DIR__, "src/generated") @@ -53,7 +53,7 @@ deploydocs( repo = "github.com/fredrikekre/Literate.jl.git", target = "build", osname = "linux", - julia = "0.6", + julia = "nightly", deps = nothing, make = nothing ) diff --git a/docs/src/outputformats.md b/docs/src/outputformats.md index 333f344..d300da3 100644 --- a/docs/src/outputformats.md +++ b/docs/src/outputformats.md @@ -4,6 +4,7 @@ When the source is parsed, and have been processed it is time to render the outp We will consider the following source snippet: ```@eval +import Markdown Markdown.parse("```julia\n" * rstrip(read("outputformats.jl", String)) * "\n```") ``` @@ -14,7 +15,8 @@ and see how this is rendered in each of the output formats. The (default) markdown output of the source snippet above is as follows ```@eval -file = joinpath(@__DIR__, "src/generated/name.md") +import Markdown +file = joinpath(@__DIR__, "../src/generated/name.md") str = "````markdown\n" * rstrip(read(file, String)) * "\n````" rm(file) Markdown.parse(str) @@ -55,7 +57,8 @@ Literate.notebook The (default) script output of the source snippet above is as follows ```@eval -file = joinpath(@__DIR__, "src/generated/outputformats.jl") +import Markdown +file = joinpath(@__DIR__, "../src/generated/outputformats.jl") str = "```julia\n" * rstrip(read(file, String)) * "\n```" rm(file) Markdown.parse(str) diff --git a/examples/example.jl b/examples/example.jl index 4a3c586..feccdf0 100644 --- a/examples/example.jl +++ b/examples/example.jl @@ -64,7 +64,7 @@ foo() # [Plots.jl](https://github.com/JuliaPlots/Plots.jl) package using Plots -x = linspace(0, 6π, 1000) +x = range(0, stop=6π, length=1000) y1 = sin.(x) y2 = cos.(x) plot(x, [y1, y2]) diff --git a/src/Documenter.jl b/src/Documenter.jl index 8e7887f..115d3e7 100644 --- a/src/Documenter.jl +++ b/src/Documenter.jl @@ -2,22 +2,6 @@ # (https://github.com/JuliaDocs/Documenter.jl), see LICENSE.md for license module Documenter -using Compat: stdout, stderr, Cvoid - -@static if VERSION < v"0.7.0-DEV.3951" - link_pipe!(pipe; reader_supports_async = true, writer_supports_async = true) = - Base.link_pipe(pipe, julia_only_read = reader_supports_async, julia_only_write = writer_supports_async) -else - import Base: link_pipe! -end -@static if isdefined(Base, :with_logger) - using Logging -else # make things a no-op since warnings/info already print to stdout - struct ConsoleLogger end - ConsoleLogger(io) = ConsoleLogger() - with_logger(f, logger) = f() -end - function withoutput(f) # Save the default output streams. default_stdout = stdout @@ -25,18 +9,18 @@ function withoutput(f) # Redirect both the `stdout` and `stderr` streams to a single `Pipe` object. pipe = Pipe() - link_pipe!(pipe; reader_supports_async = true, writer_supports_async = true) + Base.link_pipe!(pipe; reader_supports_async = true, writer_supports_async = true) redirect_stdout(pipe.in) redirect_stderr(pipe.in) # Also redirect logging stream to the same pipe - logger = ConsoleLogger(pipe.in) + logger = Base.CoreLogging.SimpleLogger(pipe.in) # Bytes written to the `pipe` are captured in `output` and converted to a `String`. output = UInt8[] # Run the function `f`, capturing all output that it might have generated. # Success signals whether the function `f` did or did not throw an exception. - result, success, backtrace = with_logger(logger) do + result, success, backtrace = Base.CoreLogging.with_logger(logger) do try f(), true, Vector{Ptr{Cvoid}}() catch err diff --git a/src/IJulia.jl b/src/IJulia.jl index 71b7ec2..b2aa7a1 100644 --- a/src/IJulia.jl +++ b/src/IJulia.jl @@ -1,8 +1,7 @@ # this file contains some utilities copied from the IJulia.jl package # (https://github.com/JuliaLang/IJulia.jl), see LICENSE.md for license module IJulia -using Compat.Base64 -import Compat: showable +using Base64 const text_plain = MIME("text/plain") const image_svg = MIME("image/svg+xml") diff --git a/src/Literate.jl b/src/Literate.jl index d8d425d..4212699 100644 --- a/src/Literate.jl +++ b/src/Literate.jl @@ -1,9 +1,7 @@ __precompile__() module Literate -import Compat: replace, popfirst!, @error, @info, occursin - -import JSON +import JSON, REPL include("IJulia.jl") import .IJulia @@ -319,11 +317,23 @@ function markdown(inputfile, outputdir; preprocess = identity, postprocess = ide # run some Documenter specific things if documenter # change the Edit on GitHub link - repo = get(ENV, "TRAVIS_REPO_SLUG", "") - pkg = first(split(last(split(repo, '/')), '.')) + repo = get(ENV, "TRAVIS_REPO_SLUG", nothing) + if repo === nothing + path = "" + else + pkg = String(first(split(last(split(repo, '/')), '.'))) + pkgsrc = Base.find_package(pkg) + if pkgsrc === nothing + path = "" + else + repo_root = first(split(pkgsrc, joinpath("src", pkg * ".jl"))) + path = relpath(inputfile, repo_root) + path = replace(path, "\\" => "/") + end + end content = """ # ```@meta - # EditURL = "@__REPO_ROOT_URL__$(replace(relpath(inputfile, Pkg.dir(pkg)), "\\" => "/"))" + # EditURL = "@__REPO_ROOT_URL__$(path)" # ``` """ * content @@ -516,12 +526,12 @@ function execute_notebook(nb) stream = Dict{String,Any}() stream["output_type"] = "stream" stream["name"] = "stdout" - stream["text"] = collect(Any, eachline(IOBuffer(String(str)), chomp = false)) # 0.7 chomp = false => keep = true + stream["text"] = collect(Any, eachline(IOBuffer(String(str)), keep = true)) push!(cell["outputs"], stream) end # check if ; is used to suppress output - r = Base.REPL.ends_with_semicolon(block) ? nothing : r + r = REPL.ends_with_semicolon(block) ? nothing : r # r should go into execute_result if r !== nothing @@ -533,7 +543,7 @@ function execute_notebook(nb) # we need to split some mime types into vectors of lines instead of a single string for mime in ("image/svg+xml", "text/html") if haskey(dd, mime) - dd[mime] = collect(Any, eachline(IOBuffer(dd[mime]), chomp = false)) + dd[mime] = collect(Any, eachline(IOBuffer(dd[mime]), keep = true)) end end execute_result["data"] = dd diff --git a/test/coverage.jl b/test/coverage.jl new file mode 100644 index 0000000..75bcef6 --- /dev/null +++ b/test/coverage.jl @@ -0,0 +1,6 @@ +using Pkg +Pkg.add("Coverage") +using Coverage +cd(joinpath(@__DIR__, "..")) do + Codecov.submit(Codecov.process_folder()) +end diff --git a/test/runtests.jl b/test/runtests.jl index 8ddc648..6c17a3d 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,8 +1,6 @@ import Literate import Literate: Chunk, MDChunk, CodeChunk -import Compat -import Compat: occursin -using Compat.Test +using Test # compare content of two parsed chunk vectors function compare_chunks(chunks1, chunks2) @@ -539,7 +537,7 @@ end lastidx = 1 for cell in expected_cells - idx = Compat.findnext(cell, notebook, lastidx) + idx = findnext(cell, notebook, lastidx) @test idx !== nothing lastidx = nextind(notebook, last(idx)) end @@ -619,7 +617,7 @@ end lastidx = 1 for out in expected_outputs - idx = Compat.findnext(out, notebook, lastidx) + idx = findnext(out, notebook, lastidx) @test idx !== nothing lastidx = nextind(notebook, last(idx)) end