90 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			V
		
	
	
| module main
 | |
| 
 | |
| /*
 | |
| QTODO
 | |
| import (
 | |
| 	os
 | |
| 	flag
 | |
| 	strings
 | |
| 	compiler
 | |
| 	v.pref
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	tool_version = '0.0.1'
 | |
| 	tool_description = '  Extracts the function names declared in a v file.'
 | |
| )
 | |
| 
 | |
| fn f_to_string(fmod string, f compiler.Fn) ?string {
 | |
| 	svisibility := if f.is_public {
 | |
| 		'public'
 | |
| 	}else{
 | |
| 		'private'
 | |
| 	}
 | |
| 	if fmod != f.v_fn_module() { return none }
 | |
| 	if fmod == 'builtin' {
 | |
| 		return '$svisibility\t' + f.v_fn_name()
 | |
| 	}
 | |
| 	return '$svisibility\t' + f.v_fn_module() + '.' + f.v_fn_name()
 | |
| }
 | |
| 
 | |
| fn analyze_v_file(file string) {
 | |
| 	println('')
 | |
| 	hash := strings.repeat(`#`, (76 - file.len) / 2)
 | |
| 	println('$hash  $file  $hash')
 | |
| 
 | |
| 	// main work:
 | |
| 	mut pref := &pref.Preferences{
 | |
| 		path: file
 | |
| 	}
 | |
| 	pref.fill_with_defaults()
 | |
| 	mut v := compiler.new_v(pref)
 | |
| 	v.add_v_files_to_compile()
 | |
| 	for f in v.files { v.parse(f, .decl) }
 | |
| 	fi := v.get_file_parser_index( file ) or { panic(err) }
 | |
| 	fmod :=  v.parsers[fi].mod
 | |
| 
 | |
| 	// output:
 | |
| 	mut fns :=[]string
 | |
| 	for _, f in v.table.fns {
 | |
| 		fname := f_to_string(fmod, f) or { continue }
 | |
| 		fns << fname
 | |
| 	}
 | |
| 	fns.sort()
 | |
| 	for f in fns { println(f) }
 | |
| 
 | |
| }
 | |
| 
 | |
| fn main(){
 | |
| 	toolexe := os.executable()
 | |
| 	compiler.set_vroot_folder(os.dir(os.dir(os.dir(toolexe))))
 | |
| 
 | |
| 	mut fp := flag.new_flag_parser(os.args)
 | |
| 	fp.application(os.file_name(toolexe))
 | |
| 	fp.version( tool_version )
 | |
| 	fp.description( tool_description )
 | |
| 	fp.arguments_description('FILE.v/FOLDER [FILE.v/FOLDER]...')
 | |
| 	fp.limit_free_args_to_at_least(1)
 | |
| 	fp.skip_executable()
 | |
| 	show_help:=fp.bool('help', `h`, false, 'Show this help screen\n')
 | |
| 	if( show_help ){
 | |
| 		println( fp.usage() )
 | |
| 		exit(0)
 | |
| 	}
 | |
| 
 | |
| 	mut files := []string
 | |
| 	locations := fp.finalize() or { eprintln('Error: ' + err) exit(1) }
 | |
| 	for xloc in locations {
 | |
| 		loc := os.real_path(xloc)
 | |
| 		xfiles := if os.is_dir(loc){ os.walk_ext(loc,'.v') } else { [loc] }
 | |
| 		filtered_files := xfiles.filter(!it.ends_with('_js.v'))
 | |
| 		files << filtered_files
 | |
| 	}
 | |
| 
 | |
| 	for file in files {
 | |
| 		analyze_v_file(file)
 | |
| 	}
 | |
| }
 | |
| */
 | |
| fn main()  {}
 |