• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

JuliaLang / julia / #37527

pending completion
#37527

push

local

web-flow
make `IRShow.method_name` inferrable (#49607)

18 of 18 new or added lines in 3 files covered. (100.0%)

68710 of 81829 relevant lines covered (83.97%)

33068903.12 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.36
/stdlib/Markdown/src/render/terminal/render.jl
1
# This file is a part of Julia. License is MIT: https://julialang.org/license
2

3
include("formatting.jl")
4

5
cols(io) = displaysize(io)[2]
28✔
6

7
function term(io::IO, content::Vector, cols)
51✔
8
    isempty(content) && return
51✔
9
    for md in content[1:end-1]
99✔
10
        term(io, md, cols)
5✔
11
        print(io, '\n', '\n')
5✔
12
    end
6✔
13
    term(io, content[end], cols)
50✔
14
end
15

16
term(io::IO, md::MD, columns = cols(io)) = term(io, md.content, columns)
60✔
17

18
function term(io::IO, md::Paragraph, columns)
30✔
19
    print(io, ' '^margin)
30✔
20
    print_wrapped(io, width = columns-2margin, pre = ' '^margin) do io
30✔
21
        terminline(io, md.content)
30✔
22
    end
23
end
24

25
function term(io::IO, md::BlockQuote, columns)
1✔
26
    s = sprint(term, md.content, columns - 10; context=io)
1✔
27
    lines = split(rstrip(s), '\n')
1✔
28
    print(io, ' '^margin, '│', lines[1])
1✔
29
    for i = 2:length(lines)
1✔
30
        print(io, '\n', ' '^margin, '│', lines[i])
×
31
    end
×
32
end
33

34
function term(io::IO, md::Admonition, columns)
1✔
35
    col = :default
1✔
36
    # If the types below are modified, the page manual/documentation.md must be updated accordingly.
37
    if md.category == "danger"
1✔
38
        col = Base.error_color()
×
39
    elseif md.category == "warning"
1✔
40
        col = Base.warn_color()
×
41
    elseif md.category in ("info", "note")
2✔
42
        col = Base.info_color()
1✔
43
    elseif md.category == "tip"
×
44
        col = :green
×
45
    end
46
    printstyled(io, ' '^margin, "│ "; color=col, bold=true)
1✔
47
    printstyled(io, isempty(md.title) ? md.category : md.title; color=col, bold=true)
2✔
48
    printstyled(io, '\n', ' '^margin, '│', '\n'; color=col, bold=true)
1✔
49
    s = sprint(term, md.content, columns - 10; context=io)
1✔
50
    lines = split(rstrip(s), '\n')
1✔
51
    for i in eachindex(lines)
2✔
52
        printstyled(io, ' '^margin, '│'; color=col, bold=true)
3✔
53
        print(io, lines[i])
3✔
54
        i < lastindex(lines) && println(io)
3✔
55
    end
3✔
56
end
57

58
function term(io::IO, f::Footnote, columns)
×
59
    print(io, ' '^margin, "│ ")
×
60
    printstyled(io, "[^$(f.id)]", bold=true)
×
61
    println(io, '\n', ' '^margin, '│')
×
62
    s = sprint(term, f.text, columns - 10; context=io)
×
63
    lines = split(rstrip(s), '\n')
×
64
    for i in eachindex(lines)
×
65
        print(io, ' '^margin, '│', lines[i])
×
66
        i < lastindex(lines) && println(io)
×
67
    end
×
68
end
69

70
function term(io::IO, md::List, columns)
9✔
71
    for (i, point) in enumerate(md.items)
18✔
72
        print(io, ' '^2margin, isordered(md) ? "$(i + md.ordered - 1). " : "•  ")
17✔
73
        print_wrapped(io, width = columns-(4margin+2), pre = ' '^(2margin+3),
17✔
74
                          i = 2margin+2) do io
75
            term(io, point, columns - 10)
17✔
76
        end
77
        i < lastindex(md.items) && print(io, '\n', '\n')
17✔
78
    end
17✔
79
end
80

81
function _term_header(io::IO, md, char, columns)
6✔
82
    text = terminline_string(io, md.text)
6✔
83
    with_output_color(:bold, io) do io
6✔
84
        print(io, ' '^margin)
6✔
85
        line_no, lastline_width = print_wrapped(io, text,
6✔
86
                                                width=columns - 4margin; pre=" ")
87
        line_width = min(1 + lastline_width, columns)
6✔
88
        if line_no > 1
6✔
89
            line_width = max(line_width, div(columns, 3))
×
90
        end
91
        header_width = max(0, line_width-margin)
6✔
92
        char != ' ' && header_width > 0 && print(io, '\n', ' '^(margin), char^header_width)
6✔
93
    end
94
end
95

96
const _header_underlines = collect("≡=–-⋅ ")
97
# TODO settle on another option with unicode e.g. "≡=≃–∼⋅" ?
98

99
function term(io::IO, md::Header{l}, columns) where l
6✔
100
    underline = _header_underlines[l]
6✔
101
    _term_header(io, md, underline, columns)
6✔
102
end
103

104
function term(io::IO, md::Code, columns)
2✔
105
    with_output_color(:cyan, io) do io
2✔
106
        L = lines(md.code)
2✔
107
        for i in eachindex(L)
4✔
108
            print(io, ' '^margin, L[i])
2✔
109
            i < lastindex(L) && println(io)
2✔
110
        end
2✔
111
    end
112
end
113

114
function term(io::IO, tex::LaTeX, columns)
1✔
115
    printstyled(io, ' '^margin, tex.formula, color=:magenta)
1✔
116
end
117

118
term(io::IO, br::LineBreak, columns) = nothing # line breaks already printed between subsequent elements
×
119

120
function term(io::IO, br::HorizontalRule, columns)
×
121
   print(io, ' '^margin, '─'^(columns - 2margin))
×
122
end
123

124
term(io::IO, x, _) = show(io, MIME"text/plain"(), x)
1✔
125

126
# Inline Content
127

128
terminline_string(io::IO, md) = sprint(terminline, md; context=io)
20✔
129

130
terminline(io::IO, content...) = terminline(io, collect(content))
4✔
131

132
function terminline(io::IO, content::Vector)
60✔
133
    for md in content
61✔
134
        terminline(io, md)
69✔
135
    end
69✔
136
end
137

138
function terminline(io::IO, md::AbstractString)
49✔
139
    print(io, replace(md, r"[\s\t\n]+" => ' '))
57✔
140
end
141

142
function terminline(io::IO, md::Bold)
2✔
143
    with_output_color(terminline, :bold, io, md.text)
2✔
144
end
145

146
function terminline(io::IO, md::Italic)
4✔
147
    with_output_color(terminline, :underline, io, md.text)
4✔
148
end
149

150
function terminline(io::IO, md::LineBreak)
2✔
151
    println(io)
2✔
152
end
153

154
function terminline(io::IO, md::Image)
1✔
155
    terminline(io, "(Image: $(md.alt))")
1✔
156
end
157

158
terminline(io::IO, f::Footnote) = with_output_color(terminline, :bold, io, "[^$(f.id)]")
×
159

160
function terminline(io::IO, md::Link)
4✔
161
    url = !Base.startswith(md.url, "@ref") ? " ($(md.url))" : ""
7✔
162
    text = terminline_string(io, md.text)
4✔
163
    terminline(io, text, url)
4✔
164
end
165

166
function terminline(io::IO, code::Code)
×
167
    printstyled(io, code.code, color=:cyan)
×
168
end
169

170
function terminline(io::IO, tex::LaTeX)
×
171
    printstyled(io, tex.formula, color=:magenta)
×
172
end
173

174
terminline(io::IO, x) = show(io, MIME"text/plain"(), x)
×
175

176
# Show in terminal
177
Base.show(io::IO, ::MIME"text/plain", md::MD) = (term(io, md); nothing)
30✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc