vfmt fixes
							parent
							
								
									9eeb3dfe7e
								
							
						
					
					
						commit
						e272a10bda
					
				|  | @ -62,7 +62,7 @@ fn main() { | ||||||
| 		exit(0) | 		exit(0) | ||||||
| 	} | 	} | ||||||
| 	// we are NOT a worker at this stage, i.e. we are a parent vfmt process
 | 	// we are NOT a worker at this stage, i.e. we are a parent vfmt process
 | ||||||
| 	possible_files := cmdline.only_non_options(cmdline.after(args, ['fmt'])) | 	possible_files := cmdline.only_non_options(cmdline.options_after(args, ['fmt'])) | ||||||
| 	if foptions.is_verbose { | 	if foptions.is_verbose { | ||||||
| 		eprintln('vfmt toolexe: $toolexe') | 		eprintln('vfmt toolexe: $toolexe') | ||||||
| 		eprintln('vfmt args: ' + os.args.str()) | 		eprintln('vfmt args: ' + os.args.str()) | ||||||
|  | @ -71,11 +71,13 @@ fn main() { | ||||||
| 	} | 	} | ||||||
| 	mut files := []string | 	mut files := []string | ||||||
| 	for file in possible_files { | 	for file in possible_files { | ||||||
| 		if !os.exists(file) { |  | ||||||
| 			compiler.verror('"$file" does not exist.') |  | ||||||
| 		} |  | ||||||
| 		if !file.ends_with('.v') { | 		if !file.ends_with('.v') { | ||||||
| 			compiler.verror('v fmt can only be used on .v files.\nOffending file: "$file" .') | 			compiler.verror('v fmt can only be used on .v files.\nOffending file: "$file" .') | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if !os.exists(file) { | ||||||
|  | 			compiler.verror('"$file" does not exist.') | ||||||
|  | 			continue | ||||||
| 		} | 		} | ||||||
| 		files << file | 		files << file | ||||||
| 	} | 	} | ||||||
|  | @ -170,7 +172,7 @@ fn (foptions &FormatOptions) format_file(file string) { | ||||||
| 	compiler_params.path = cfile | 	compiler_params.path = cfile | ||||||
| 	compiler_params.mod = mod_name | 	compiler_params.mod = mod_name | ||||||
| 	compiler_params.is_test = is_test_file | 	compiler_params.is_test = is_test_file | ||||||
| 	compiler_params.is_script = file.ends_with('.v') || file.ends_with('.vsh')   | 	compiler_params.is_script = file.ends_with('.v') || file.ends_with('.vsh') | ||||||
| 	if foptions.is_verbose { | 	if foptions.is_verbose { | ||||||
| 		eprintln('vfmt format_file: file: $file') | 		eprintln('vfmt format_file: file: $file') | ||||||
| 		eprintln('vfmt format_file: cfile: $cfile') | 		eprintln('vfmt format_file: cfile: $cfile') | ||||||
|  |  | ||||||
|  | @ -478,7 +478,7 @@ fn init_settings() { | ||||||
| 	} | 	} | ||||||
| 	s.is_help = '-h' in os.args || '--help' in os.args || 'help' in os.args | 	s.is_help = '-h' in os.args || '--help' in os.args || 'help' in os.args | ||||||
| 	s.is_verbose = '-verbose' in os.args || '--verbose' in os.args | 	s.is_verbose = '-verbose' in os.args || '--verbose' in os.args | ||||||
| 	s.server_urls = cmdline.many_values(os.args, '-server-url') | 	s.server_urls = cmdline.options(os.args, '-server-url') | ||||||
| 	s.vmodules_path = os.home_dir() + '.vmodules' | 	s.vmodules_path = os.home_dir() + '.vmodules' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -77,10 +77,10 @@ pub fn run_repl(workdir string, vrepl_prefix string) []string { | ||||||
| 	version := v_version() | 	version := v_version() | ||||||
| 	println(version) | 	println(version) | ||||||
| 	println('Use Ctrl-C or `exit` to exit') | 	println('Use Ctrl-C or `exit` to exit') | ||||||
| 	 | 
 | ||||||
| 	file := filepath.join( workdir, '.${vrepl_prefix}vrepl.v' ) | 	file := filepath.join( workdir, '.${vrepl_prefix}vrepl.v' ) | ||||||
| 	temp_file := filepath.join( workdir, '.${vrepl_prefix}vrepl_temp.v')	 | 	temp_file := filepath.join( workdir, '.${vrepl_prefix}vrepl_temp.v') | ||||||
| 	mut prompt := '>>> '	 | 	mut prompt := '>>> ' | ||||||
| 	defer { | 	defer { | ||||||
| 		os.rm(file) | 		os.rm(file) | ||||||
| 		os.rm(temp_file) | 		os.rm(temp_file) | ||||||
|  | @ -155,12 +155,12 @@ pub fn run_repl(workdir string, vrepl_prefix string) []string { | ||||||
| 			mut temp_flag := false | 			mut temp_flag := false | ||||||
| 			func_call := r.function_call(r.line) | 			func_call := r.function_call(r.line) | ||||||
| 			if !( | 			if !( | ||||||
| 				r.line.contains(' ') ||  | 				r.line.contains(' ') || | ||||||
| 				r.line.contains(':') ||  | 				r.line.contains(':') || | ||||||
| 				r.line.contains('=') ||  | 				r.line.contains('=') || | ||||||
| 				r.line.contains(',') ||  | 				r.line.contains(',') || | ||||||
| 				r.line.ends_with('++') ||  | 				r.line.ends_with('++') || | ||||||
| 				r.line.ends_with('--') ||  | 				r.line.ends_with('--') || | ||||||
| 				r.line == '') && !func_call { | 				r.line == '') && !func_call { | ||||||
| 				temp_line = 'println($r.line)' | 				temp_line = 'println($r.line)' | ||||||
| 				temp_flag = true | 				temp_flag = true | ||||||
|  | @ -219,7 +219,7 @@ fn main() { | ||||||
| 	// Support for the parameters replfolder and replprefix is needed
 | 	// Support for the parameters replfolder and replprefix is needed
 | ||||||
| 	// so that the repl can be launched in parallel by several different
 | 	// so that the repl can be launched in parallel by several different
 | ||||||
| 	// threads by the REPL test runner.
 | 	// threads by the REPL test runner.
 | ||||||
| 	args := cmdline.after(os.args, ['repl']) | 	args := cmdline.options_after(os.args, ['repl']) | ||||||
| 	replfolder := os.realpath( cmdline.option(args, '-replfolder', '.') ) | 	replfolder := os.realpath( cmdline.option(args, '-replfolder', '.') ) | ||||||
| 	replprefix := cmdline.option(args, '-replprefix', 'noprefix.') | 	replprefix := cmdline.option(args, '-replprefix', 'noprefix.') | ||||||
| 	os.chdir( replfolder ) | 	os.chdir( replfolder ) | ||||||
|  |  | ||||||
|  | @ -22,8 +22,8 @@ pub fn main() { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	args_to_executable := args[1..] | 	args_to_executable := args[1..] | ||||||
| 	args_before := cmdline.before(args_to_executable, ['test']) | 	args_before := cmdline.options_before(args_to_executable, ['test']) | ||||||
| 	args_after := cmdline.after(args_to_executable, ['test']) | 	args_after := cmdline.options_after(args_to_executable, ['test']) | ||||||
| 
 | 
 | ||||||
| 	if args_after.join(' ') == 'v' { | 	if args_after.join(' ') == 'v' { | ||||||
| 		eprintln('`v test v` has been deprecated.') | 		eprintln('`v test v` has been deprecated.') | ||||||
|  | @ -53,4 +53,3 @@ pub fn main() { | ||||||
| 		exit(1) | 		exit(1) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ pub fn run_compiled_executable_and_exit(v &compiler.V, args []string) { | ||||||
| 		println('============ running $v.pref.out_name ============') | 		println('============ running $v.pref.out_name ============') | ||||||
| 	} | 	} | ||||||
| 	mut cmd := '"${v.pref.out_name}"' | 	mut cmd := '"${v.pref.out_name}"' | ||||||
| 	args_after_no_options := cmdline.only_non_options( cmdline.after(args,['run','test']) ) | 	args_after_no_options := cmdline.only_non_options( cmdline.options_after(args,['run','test']) ) | ||||||
| 	if args_after_no_options.len > 1 { | 	if args_after_no_options.len > 1 { | ||||||
| 		cmd += ' ' + args_after_no_options[1..].join(' ') | 		cmd += ' ' + args_after_no_options[1..].join(' ') | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -39,7 +39,7 @@ pub fn new_v(args []string) &compiler.V { | ||||||
| 	mut out_name := cmdline.option(args, '-o', '') | 	mut out_name := cmdline.option(args, '-o', '') | ||||||
| 	mut dir := args.last() | 	mut dir := args.last() | ||||||
| 	if 'run' in args { | 	if 'run' in args { | ||||||
| 		args_after_run := cmdline.only_non_options( cmdline.after(args,['run']) ) | 		args_after_run := cmdline.only_non_options( cmdline.options_after(args,['run']) ) | ||||||
| 		dir = if args_after_run.len>0 { args_after_run[0] } else { '' } | 		dir = if args_after_run.len>0 { args_after_run[0] } else { '' } | ||||||
| 	} | 	} | ||||||
| 	if dir == 'v.v' { | 	if dir == 'v.v' { | ||||||
|  | @ -95,9 +95,8 @@ pub fn new_v(args []string) &compiler.V { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// println('VROOT=$vroot')
 | 	// println('VROOT=$vroot')
 | ||||||
| 	cflags := cmdline.many_values(args, '-cflags').join(' ') | 	cflags := cmdline.options(args, '-cflags').join(' ') | ||||||
| 
 | 	defines := cmdline.options(args, '-d') | ||||||
| 	defines := cmdline.many_values(args, '-d') |  | ||||||
| 	compile_defines, compile_defines_all := parse_defines( defines ) | 	compile_defines, compile_defines_all := parse_defines( defines ) | ||||||
| 
 | 
 | ||||||
| 	rdir := os.realpath(dir) | 	rdir := os.realpath(dir) | ||||||
|  | @ -194,7 +193,7 @@ pub fn new_v(args []string) &compiler.V { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn find_c_compiler_thirdparty_options(args []string) string { | fn find_c_compiler_thirdparty_options(args []string) string { | ||||||
| 	mut cflags := cmdline.many_values(args,'-cflags') | 	mut cflags := cmdline.options(args, '-cflags') | ||||||
| 	$if !windows { | 	$if !windows { | ||||||
| 		cflags << '-fPIC' | 		cflags << '-fPIC' | ||||||
| 	} | 	} | ||||||
|  | @ -226,4 +225,3 @@ fn parse_defines(defines []string) ([]string,[]string) { | ||||||
| 	} | 	} | ||||||
| 	return compile_defines, compile_defines_all | 	return compile_defines, compile_defines_all | ||||||
| } | } | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -1,17 +1,26 @@ | ||||||
| module cmdline | module cmdline | ||||||
| 
 | 
 | ||||||
| pub fn many_values(args []string, optname string) []string { | // Fetch multiple option by param, e.g.
 | ||||||
|  | // args: ['v', '-d', 'aa', '-d', 'bb', '-d', 'cc']
 | ||||||
|  | // param: '-d'
 | ||||||
|  | // ret: ['aa', 'bb', 'cc']
 | ||||||
|  | pub fn options(args []string, param string) []string { | ||||||
| 	mut flags := []string | 	mut flags := []string | ||||||
| 	for ci, cv in args { | 	for i, v in args { | ||||||
| 		if cv == optname { | 		if v == param { | ||||||
| 			if ci + 1 < args.len { | 			if i + 1 < args.len { | ||||||
| 				flags << args[ci + 1] | 				flags << args[i + 1] | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return flags | 	return flags | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Fetch option by param, e.g.
 | ||||||
|  | // args: ['v', '-d', 'aa']
 | ||||||
|  | // param: '-d'
 | ||||||
|  | // def: ''
 | ||||||
|  | // ret: 'aa'
 | ||||||
| pub fn option(args []string, param string, def string) string { | pub fn option(args []string, param string, def string) string { | ||||||
| 	mut found := false | 	mut found := false | ||||||
| 	for arg in args { | 	for arg in args { | ||||||
|  | @ -25,7 +34,11 @@ pub fn option(args []string, param string, def string) string { | ||||||
| 	return def | 	return def | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn before(args []string, what []string) []string { | // Fetch all options before what params, e.g.
 | ||||||
|  | // args: ['-stat', 'test', 'aaa.v']
 | ||||||
|  | // what: ['test']
 | ||||||
|  | // ret: ['-stat']
 | ||||||
|  | pub fn options_before(args []string, what []string) []string { | ||||||
| 	mut found := false | 	mut found := false | ||||||
| 	mut args_before := []string | 	mut args_before := []string | ||||||
| 	for a in args { | 	for a in args { | ||||||
|  | @ -38,7 +51,11 @@ pub fn before(args []string, what []string) []string { | ||||||
| 	return args_before | 	return args_before | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn after(args []string, what []string) []string { | // Fetch all options after what params, e.g.
 | ||||||
|  | // args: ['-stat', 'test', 'aaa.v']
 | ||||||
|  | // what: ['test']
 | ||||||
|  | // ret: ['aaa.v']
 | ||||||
|  | pub fn options_after(args []string, what []string) []string { | ||||||
| 	mut found := false | 	mut found := false | ||||||
| 	mut args_after := []string | 	mut args_after := []string | ||||||
| 	for a in args { | 	for a in args { | ||||||
|  | @ -53,10 +70,16 @@ pub fn after(args []string, what []string) []string { | ||||||
| 	return args_after | 	return args_after | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Fetch all options not start with '-', e.g.
 | ||||||
|  | // args: ['-d', 'aa', '--help', 'bb']
 | ||||||
|  | // ret: ['aa', 'bb']
 | ||||||
| pub fn only_non_options(args []string) []string { | pub fn only_non_options(args []string) []string { | ||||||
| 	return args.filter(!it.starts_with('-')) | 	return args.filter(!it.starts_with('-')) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Fetch all options start with '-', e.g.
 | ||||||
|  | // args: ['-d', 'aa', '--help', 'bb']
 | ||||||
|  | // ret: ['-d', '--help']
 | ||||||
| pub fn only_options(args []string) []string { | pub fn only_options(args []string) []string { | ||||||
| 	return args.filter(it.starts_with('-')) | 	return args.filter(it.starts_with('-')) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,37 @@ | ||||||
|  | import os.cmdline | ||||||
|  | 
 | ||||||
|  | fn test_options() { | ||||||
|  | 	args := ['v', '-d', 'aa', '-d', 'bb', '-d', 'cc'] | ||||||
|  | 	ret := cmdline.options(args, '-d') | ||||||
|  | 	assert ret.eq(['aa', 'bb', 'cc']) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn test_option() { | ||||||
|  | 	args := ['v', '-d', 'aa'] | ||||||
|  | 	ret := cmdline.option(args, '-d', '') | ||||||
|  | 	assert ret == 'aa' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn test_options_before() { | ||||||
|  | 	args := ['-stat', 'test', 'aaa.v'] | ||||||
|  | 	ret := cmdline.options_before(args, ['test']) | ||||||
|  | 	assert ret.eq(['-stat']) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn test_options_after() { | ||||||
|  | 	args := ['-stat', 'test', 'aaa.v'] | ||||||
|  | 	ret := cmdline.options_after(args, ['test']) | ||||||
|  | 	assert ret.eq(['aaa.v']) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn test_only_non_options() { | ||||||
|  | 	args := ['-d', 'aa', '--help', 'bb'] | ||||||
|  | 	ret := cmdline.only_non_options(args) | ||||||
|  | 	assert ret.eq(['aa', 'bb']) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn test_only_options() { | ||||||
|  | 	args := ['-d', 'aa', '--help', 'bb'] | ||||||
|  | 	ret := cmdline.only_options(args) | ||||||
|  | 	assert ret.eq(['-d', '--help']) | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue