mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
fmt: reorder and sort methods into section (#9363)
This commit is contained in:
parent
04095f4088
commit
f8fcf3ff66
60
vlib/v/fmt/attrs.v
Normal file
60
vlib/v/fmt/attrs.v
Normal file
@ -0,0 +1,60 @@
|
||||
// Copyright (c) 2019-2021 Alexander Medvednikov. All rights reserved.
|
||||
// Use of this source code is governed by an MIT license
|
||||
// that can be found in the LICENSE file.
|
||||
module fmt
|
||||
|
||||
import v.table
|
||||
|
||||
pub fn (mut f Fmt) attrs(attrs []table.Attr) {
|
||||
mut sorted_attrs := attrs.clone()
|
||||
// Sort the attributes. The ones with arguments come first.
|
||||
sorted_attrs.sort(a.arg.len > b.arg.len)
|
||||
for i, attr in sorted_attrs {
|
||||
if attr.arg.len == 0 {
|
||||
f.single_line_attrs(sorted_attrs[i..], {})
|
||||
break
|
||||
}
|
||||
f.writeln('[$attr]')
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AttrsOptions {
|
||||
inline bool
|
||||
}
|
||||
|
||||
pub fn (mut f Fmt) single_line_attrs(attrs []table.Attr, options AttrsOptions) {
|
||||
if attrs.len == 0 {
|
||||
return
|
||||
}
|
||||
mut sorted_attrs := attrs.clone()
|
||||
sorted_attrs.sort(a.name < b.name)
|
||||
if options.inline {
|
||||
f.write(' ')
|
||||
}
|
||||
f.write('[')
|
||||
for i, attr in sorted_attrs {
|
||||
if i > 0 {
|
||||
f.write('; ')
|
||||
}
|
||||
f.write('$attr')
|
||||
}
|
||||
f.write(']')
|
||||
if !options.inline {
|
||||
f.writeln('')
|
||||
}
|
||||
}
|
||||
|
||||
fn inline_attrs_len(attrs []table.Attr) int {
|
||||
if attrs.len == 0 {
|
||||
return 0
|
||||
}
|
||||
mut n := 2 // ' ['.len
|
||||
for i, attr in attrs {
|
||||
if i > 0 {
|
||||
n += 2 // '; '.len
|
||||
}
|
||||
n += '$attr'.len
|
||||
}
|
||||
n++ // ']'.len
|
||||
return n
|
||||
}
|
2644
vlib/v/fmt/fmt.v
2644
vlib/v/fmt/fmt.v
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user