refactor and reorganize code modules
This commit is contained in:
70
lib/core/code/write.v
Normal file
70
lib/core/code/write.v
Normal file
@@ -0,0 +1,70 @@
|
||||
module code
|
||||
|
||||
pub struct WriteCode {
|
||||
destination string
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct WriteOptions {
|
||||
pub:
|
||||
format bool
|
||||
overwrite bool
|
||||
document bool
|
||||
prefix string
|
||||
compile bool // whether to compile the written code
|
||||
test bool // whether to test the written code
|
||||
}
|
||||
|
||||
|
||||
interface ICodeItem {
|
||||
vgen() string
|
||||
}
|
||||
|
||||
pub fn vgen(code []CodeItem) string {
|
||||
mut str := ''
|
||||
for item in code {
|
||||
if item is Function {
|
||||
str += '\n${item.vgen()}'
|
||||
}
|
||||
if item is Struct {
|
||||
str += '\n${item.vgen()}'
|
||||
}
|
||||
if item is Interface {
|
||||
str += '\n${item.vgen()}'
|
||||
}
|
||||
if item is CustomCode {
|
||||
str += '\n${item.vgen()}'
|
||||
}
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
// pub fn (code Code) vgen() string {
|
||||
// return code.items.map(it.vgen()).join_lines()
|
||||
// }
|
||||
|
||||
// vgen_import generates an import statement for a given type
|
||||
pub fn (import_ Import) vgen() string {
|
||||
types_str := if import_.types.len > 0 {
|
||||
'{${import_.types.join(', ')}}'
|
||||
} else {
|
||||
''
|
||||
} // comma separated string list of types
|
||||
return 'import ${import_.mod} ${types_str}'
|
||||
}
|
||||
|
||||
|
||||
pub fn vgen_generics(generics map[string]string) string {
|
||||
if generics.keys().len == 0 {
|
||||
return ''
|
||||
}
|
||||
mut vstr := '['
|
||||
for key, val in generics {
|
||||
vstr += if val != '' { val } else { key }
|
||||
}
|
||||
return '${vstr}]'
|
||||
}
|
||||
|
||||
pub fn (custom CustomCode) vgen() string {
|
||||
return custom.text
|
||||
}
|
||||
Reference in New Issue
Block a user