aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/os/cmdline
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/os/cmdline')
-rw-r--r--v_windows/v/vlib/os/cmdline/cmdline.v82
-rw-r--r--v_windows/v/vlib/os/cmdline/cmdline_test.v37
2 files changed, 119 insertions, 0 deletions
diff --git a/v_windows/v/vlib/os/cmdline/cmdline.v b/v_windows/v/vlib/os/cmdline/cmdline.v
new file mode 100644
index 0000000..96bcb27
--- /dev/null
+++ b/v_windows/v/vlib/os/cmdline/cmdline.v
@@ -0,0 +1,82 @@
+module cmdline
+
+// 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{}
+ for i, v in args {
+ if v == param {
+ if i + 1 < args.len {
+ flags << args[i + 1]
+ }
+ }
+ }
+ 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 {
+ mut found := false
+ for arg in args {
+ if found {
+ return arg
+ } else if param == arg {
+ found = true
+ }
+ }
+ return def
+}
+
+// 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 args_before := []string{}
+ for a in args {
+ if a in what {
+ break
+ }
+ args_before << a
+ }
+ return args_before
+}
+
+// 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 args_after := []string{}
+ for a in args {
+ if a in what {
+ found = true
+ continue
+ }
+ if found {
+ args_after << a
+ }
+ }
+ 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 {
+ 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 {
+ return args.filter(it.starts_with('-'))
+}
diff --git a/v_windows/v/vlib/os/cmdline/cmdline_test.v b/v_windows/v/vlib/os/cmdline/cmdline_test.v
new file mode 100644
index 0000000..50c99e2
--- /dev/null
+++ b/v_windows/v/vlib/os/cmdline/cmdline_test.v
@@ -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 == ['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 == ['-stat']
+}
+
+fn test_options_after() {
+ args := ['-stat', 'test', 'aaa.v']
+ ret := cmdline.options_after(args, ['test'])
+ assert ret == ['aaa.v']
+}
+
+fn test_only_non_options() {
+ args := ['-d', 'aa', '--help', 'bb']
+ ret := cmdline.only_non_options(args)
+ assert ret == ['aa', 'bb']
+}
+
+fn test_only_options() {
+ args := ['-d', 'aa', '--help', 'bb']
+ ret := cmdline.only_options(args)
+ assert ret == ['-d', '--help']
+}