vfmt: support `struct Repo <T, U> { }`
parent
7d472d887e
commit
ebfd259333
|
@ -7,7 +7,6 @@ import v.util
|
||||||
// os.v - // embeded comments, mib := [1/* CTL_KERN */, 14/* KERN_PROC */, 12/* KERN_PROC_PATHNAME */, -1] => comment the rest of the line
|
// os.v - // embeded comments, mib := [1/* CTL_KERN */, 14/* KERN_PROC */, 12/* KERN_PROC_PATHNAME */, -1] => comment the rest of the line
|
||||||
const (
|
const (
|
||||||
known_failing_exceptions = [
|
known_failing_exceptions = [
|
||||||
'vlib/v/tests/generics_test.v', // struct Repo<T, U> { => struct Repo {
|
|
||||||
'vlib/crypto/aes/aes.v', // pub fn (c &AesCipher) encrypt(mut dst, mut src []byte) {
|
'vlib/crypto/aes/aes.v', // pub fn (c &AesCipher) encrypt(mut dst, mut src []byte) {
|
||||||
'vlib/crypto/aes/block_generic.v', // fn expand_key_generic(key []byte, mut enc, mut dec []u32) {
|
'vlib/crypto/aes/block_generic.v', // fn expand_key_generic(key []byte, mut enc, mut dec []u32) {
|
||||||
'vlib/crypto/aes/const.v', // multiple narrow columns of []string turned to 1 long single column, otherwise works
|
'vlib/crypto/aes/const.v', // multiple narrow columns of []string turned to 1 long single column, otherwise works
|
||||||
|
|
|
@ -170,6 +170,7 @@ pub struct StructDecl {
|
||||||
pub:
|
pub:
|
||||||
pos token.Position
|
pos token.Position
|
||||||
name string
|
name string
|
||||||
|
gen_types []table.Type
|
||||||
is_pub bool
|
is_pub bool
|
||||||
mut_pos int // mut:
|
mut_pos int // mut:
|
||||||
pub_pos int // pub:
|
pub_pos int // pub:
|
||||||
|
|
|
@ -599,7 +599,14 @@ pub fn (mut f Fmt) struct_decl(node ast.StructDecl) {
|
||||||
}
|
}
|
||||||
f.write_language_prefix(node.language)
|
f.write_language_prefix(node.language)
|
||||||
name := node.name.after('.')
|
name := node.name.after('.')
|
||||||
f.writeln('$name {')
|
f.write(name)
|
||||||
|
if node.gen_types.len > 0 {
|
||||||
|
f.write(' <')
|
||||||
|
gtypes := node.gen_types.map(f.table.type_to_str(it)).join(', ')
|
||||||
|
f.write(gtypes)
|
||||||
|
f.write('>')
|
||||||
|
}
|
||||||
|
f.writeln(' {')
|
||||||
mut max := 0
|
mut max := 0
|
||||||
mut max_type := 0
|
mut max_type := 0
|
||||||
mut field_types := []string{cap: node.fields.len}
|
mut field_types := []string{cap: node.fields.len}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
struct Foo <T> {
|
||||||
|
pub:
|
||||||
|
data T
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (f Foo<int>) value() string {
|
||||||
|
return f.data.str()
|
||||||
|
}
|
||||||
|
|
||||||
|
type DB = string
|
||||||
|
|
||||||
|
struct Repo <T, U> {
|
||||||
|
db DB
|
||||||
|
pub mut:
|
||||||
|
model T
|
||||||
|
permission U
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo_int := Foo<int>{2}
|
||||||
|
assert foo_int.value() == '2'
|
||||||
|
println(foo_int)
|
||||||
|
//
|
||||||
|
x := Repo<int,f64>{'abc', 3, 1.5}
|
||||||
|
println(x.db)
|
||||||
|
println(x.model)
|
||||||
|
println(x.permission)
|
||||||
|
}
|
|
@ -287,6 +287,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl {
|
||||||
is_union: is_union
|
is_union: is_union
|
||||||
attrs: attrs
|
attrs: attrs
|
||||||
end_comments: end_comments
|
end_comments: end_comments
|
||||||
|
gen_types: generic_types
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue