v doc: add attribute tags to `v doc -f html` (#10778)
parent
7694afa44c
commit
d1f1c5ae51
|
@ -438,9 +438,12 @@ fn doc_node_html(dn doc.DocNode, link string, head bool, include_examples bool,
|
||||||
html_tag_escape(comments)
|
html_tag_escape(comments)
|
||||||
}
|
}
|
||||||
md_content := markdown.to_html(escaped_html)
|
md_content := markdown.to_html(escaped_html)
|
||||||
hlighted_code := html_highlight(dn.content, tb)
|
highlighted_code := html_highlight(dn.content, tb)
|
||||||
node_class := if dn.kind == .const_group { ' const' } else { '' }
|
node_class := if dn.kind == .const_group { ' const' } else { '' }
|
||||||
sym_name := get_sym_name(dn)
|
sym_name := get_sym_name(dn)
|
||||||
|
mut tags := dn.tags
|
||||||
|
tags.sort()
|
||||||
|
tags_str := ' ' + tags.map('<span class="$it-attribute-tag">[$it]</span>').join('')
|
||||||
mut node_id := get_node_id(dn)
|
mut node_id := get_node_id(dn)
|
||||||
mut hash_link := if !head { ' <a href="#$node_id">#</a>' } else { '' }
|
mut hash_link := if !head { ' <a href="#$node_id">#</a>' } else { '' }
|
||||||
if head && is_module_readme(dn) {
|
if head && is_module_readme(dn) {
|
||||||
|
@ -450,9 +453,9 @@ fn doc_node_html(dn doc.DocNode, link string, head bool, include_examples bool,
|
||||||
dnw.writeln('${tabs[1]}<section id="$node_id" class="doc-node$node_class">')
|
dnw.writeln('${tabs[1]}<section id="$node_id" class="doc-node$node_class">')
|
||||||
if dn.name.len > 0 {
|
if dn.name.len > 0 {
|
||||||
if dn.kind == .const_group {
|
if dn.kind == .const_group {
|
||||||
dnw.write_string('${tabs[2]}<div class="title"><$head_tag>$sym_name$hash_link</$head_tag>')
|
dnw.write_string('${tabs[2]}<div class="title"><$head_tag>$sym_name$tags_str$hash_link</$head_tag>')
|
||||||
} else {
|
} else {
|
||||||
dnw.write_string('${tabs[2]}<div class="title"><$head_tag>$dn.kind $sym_name$hash_link</$head_tag>')
|
dnw.write_string('${tabs[2]}<div class="title"><$head_tag>$dn.kind $sym_name$tags_str<$hash_link/$head_tag>')
|
||||||
}
|
}
|
||||||
if link.len != 0 {
|
if link.len != 0 {
|
||||||
dnw.write_string('<a class="link" rel="noreferrer" target="_blank" href="$link">$link_svg</a>')
|
dnw.write_string('<a class="link" rel="noreferrer" target="_blank" href="$link">$link_svg</a>')
|
||||||
|
@ -460,7 +463,7 @@ fn doc_node_html(dn doc.DocNode, link string, head bool, include_examples bool,
|
||||||
dnw.write_string('</div>')
|
dnw.write_string('</div>')
|
||||||
}
|
}
|
||||||
if !head && dn.content.len > 0 {
|
if !head && dn.content.len > 0 {
|
||||||
dnw.writeln('<pre class="signature"><code>$hlighted_code</code></pre>')
|
dnw.writeln('<pre class="signature"><code>$highlighted_code</code></pre>')
|
||||||
}
|
}
|
||||||
// do not mess with md_content further, its formatting is important, just output it 1:1 !
|
// do not mess with md_content further, its formatting is important, just output it 1:1 !
|
||||||
dnw.writeln('$md_content\n')
|
dnw.writeln('$md_content\n')
|
||||||
|
|
|
@ -578,6 +578,11 @@ pre {
|
||||||
color: var(--code-function-text-color);
|
color: var(--code-function-text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Attribute tag colors */
|
||||||
|
.attribute-tag {
|
||||||
|
color: red !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* Medium screen and up */
|
/* Medium screen and up */
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
*::-webkit-scrollbar {
|
*::-webkit-scrollbar {
|
||||||
|
|
|
@ -370,6 +370,7 @@ pub:
|
||||||
is_conditional bool // true for `[if abc] fn abc(){}`
|
is_conditional bool // true for `[if abc] fn abc(){}`
|
||||||
is_exported bool // true for `[export: 'exact_C_name']`
|
is_exported bool // true for `[export: 'exact_C_name']`
|
||||||
is_keep_alive bool // passed memory must not be freed (by GC) before function returns
|
is_keep_alive bool // passed memory must not be freed (by GC) before function returns
|
||||||
|
is_unsafe bool // true, when [unsafe] is used on a fn
|
||||||
receiver StructField // TODO this is not a struct field
|
receiver StructField // TODO this is not a struct field
|
||||||
receiver_pos token.Position // `(u User)` in `fn (u User) name()` position
|
receiver_pos token.Position // `(u User)` in `fn (u User) name()` position
|
||||||
is_method bool
|
is_method bool
|
||||||
|
|
|
@ -127,7 +127,7 @@ pub mut:
|
||||||
pos token.Position
|
pos token.Position
|
||||||
file_path string
|
file_path string
|
||||||
kind SymbolKind
|
kind SymbolKind
|
||||||
deprecated bool
|
tags []string
|
||||||
parent_name string
|
parent_name string
|
||||||
return_type string
|
return_type string
|
||||||
children []DocNode
|
children []DocNode
|
||||||
|
@ -257,7 +257,15 @@ pub fn (mut d Doc) stmt(stmt ast.Stmt, filename string) ?DocNode {
|
||||||
node.kind = .typedef
|
node.kind = .typedef
|
||||||
}
|
}
|
||||||
ast.FnDecl {
|
ast.FnDecl {
|
||||||
node.deprecated = stmt.is_deprecated
|
if stmt.is_deprecated {
|
||||||
|
node.tags << 'deprecated'
|
||||||
|
}
|
||||||
|
if stmt.is_unsafe {
|
||||||
|
node.tags << 'unsafe'
|
||||||
|
}
|
||||||
|
if node.tags.len > 0 {
|
||||||
|
eprintln(node.tags)
|
||||||
|
}
|
||||||
node.kind = .function
|
node.kind = .function
|
||||||
node.return_type = d.type_to_str(stmt.return_type)
|
node.return_type = d.type_to_str(stmt.return_type)
|
||||||
if stmt.receiver.typ !in [0, 1] {
|
if stmt.receiver.typ !in [0, 1] {
|
||||||
|
|
|
@ -467,6 +467,7 @@ fn (mut p Parser) fn_decl() ast.FnDecl {
|
||||||
is_main: is_main
|
is_main: is_main
|
||||||
is_test: is_test
|
is_test: is_test
|
||||||
is_keep_alive: is_keep_alive
|
is_keep_alive: is_keep_alive
|
||||||
|
is_unsafe: is_unsafe
|
||||||
//
|
//
|
||||||
attrs: p.attrs
|
attrs: p.attrs
|
||||||
is_conditional: conditional_ctdefine_idx != -1
|
is_conditional: conditional_ctdefine_idx != -1
|
||||||
|
|
Loading…
Reference in New Issue