1
0
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:
Lukas Neubert 2021-03-19 10:26:34 +01:00 committed by GitHub
parent 04095f4088
commit f8fcf3ff66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 1376 additions and 1328 deletions

60
vlib/v/fmt/attrs.v Normal file
View 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
}

File diff suppressed because it is too large Load Diff