init
This commit is contained in:
		
							
								
								
									
										54
									
								
								examples/getlicense.v
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								examples/getlicense.v
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
import os
 | 
			
		||||
import os.cmdline
 | 
			
		||||
import licenseid
 | 
			
		||||
 | 
			
		||||
const help_text = 'download license text from internet and apply width (80 by default)'
 | 
			
		||||
const usage_text = 'usage: getlicense [-help] [-w <width>] <license_id>'
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
	argv := os.args[1..]
 | 
			
		||||
	opts := cmdline.only_options(argv)
 | 
			
		||||
	mut args := cmdline.only_non_options(argv)
 | 
			
		||||
	mut width := 80
 | 
			
		||||
	for opt in opts {
 | 
			
		||||
		match true {
 | 
			
		||||
			opt in ['-h', '-help', '--help'] {
 | 
			
		||||
				println(help_text)
 | 
			
		||||
				println(usage_text)
 | 
			
		||||
				exit(0)
 | 
			
		||||
			}
 | 
			
		||||
			opt == '-w' {
 | 
			
		||||
				arg := cmdline.option(argv, '-w', '')
 | 
			
		||||
				if arg.int() <= 0 {
 | 
			
		||||
					eprintln('invalid width ${opt}')
 | 
			
		||||
					exit(2)
 | 
			
		||||
				}
 | 
			
		||||
				width = arg.int()
 | 
			
		||||
				args.delete(args.index(arg))
 | 
			
		||||
			}
 | 
			
		||||
			else {
 | 
			
		||||
				eprintln('unrecognized option ${opt}')
 | 
			
		||||
				exit(2)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if args.len != 1 {
 | 
			
		||||
		eprintln(usage_text)
 | 
			
		||||
		exit(2)
 | 
			
		||||
	}
 | 
			
		||||
	license := licenseid.query(args[0]) or {
 | 
			
		||||
		eprintln(err)
 | 
			
		||||
		exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	details := license.details() or {
 | 
			
		||||
		eprintln(err)
 | 
			
		||||
		exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	for line in details.license_text.split_into_lines() {
 | 
			
		||||
		if line == '' {
 | 
			
		||||
			println('')
 | 
			
		||||
		} else {
 | 
			
		||||
			println(line.wrap(width: width))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										84
									
								
								examples/mkvmod.v
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								examples/mkvmod.v
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
import os
 | 
			
		||||
import term
 | 
			
		||||
import strings
 | 
			
		||||
import semver
 | 
			
		||||
import licenseid
 | 
			
		||||
 | 
			
		||||
struct Module {
 | 
			
		||||
pub mut:
 | 
			
		||||
	name        string
 | 
			
		||||
	description string
 | 
			
		||||
	version     string = '0.0.0'
 | 
			
		||||
	license     string = 'MIT'
 | 
			
		||||
	author      string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn make() string {
 | 
			
		||||
	eprintln('Create new v.mod, press ^C to quit')
 | 
			
		||||
	mut manifest := Module{}
 | 
			
		||||
	for {
 | 
			
		||||
		name := os.input(term.bold('Name: '))
 | 
			
		||||
		if !name.is_blank() {
 | 
			
		||||
			manifest.name = name
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		eprintln(term.bright_red('Name cannot be blank'))
 | 
			
		||||
	}
 | 
			
		||||
	manifest.description = os.input(term.bold('Description: '))
 | 
			
		||||
	for {
 | 
			
		||||
		version := os.input(term.bold('Version: '))
 | 
			
		||||
		if version.is_blank() {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if semver.is_valid(version) {
 | 
			
		||||
			manifest.version = version
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		eprintln(term.bright_red('${version} violates semantic versioning rules, see https://semver.org/ for info'))
 | 
			
		||||
	}
 | 
			
		||||
	manifest.author = os.input(term.bold('Author: '))
 | 
			
		||||
	for {
 | 
			
		||||
		license := os.input(term.bold('License: '))
 | 
			
		||||
		if license.is_blank() {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if _ := licenseid.query(license) {
 | 
			
		||||
			manifest.license = license
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		eprintln(term.bright_red('${license} is not valid SPDX license identifier, see https://spdx.org/licenses/ for info'))
 | 
			
		||||
	}
 | 
			
		||||
	vmod := gen_vmod(manifest)
 | 
			
		||||
	eprintln(term.bright_blue(vmod))
 | 
			
		||||
	if os.input(term.bold('This is correct? ')).to_lower() in ['y', 'yes'] {
 | 
			
		||||
		return vmod
 | 
			
		||||
	}
 | 
			
		||||
	eprintln(term.bold(term.bright_red('Aborted')))
 | 
			
		||||
	exit(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn gen_vmod(m Module) string {
 | 
			
		||||
	mut b := strings.new_builder(200)
 | 
			
		||||
	b.writeln('Module {')
 | 
			
		||||
	b.writeln("\tname: '${m.name}'")
 | 
			
		||||
	b.writeln("\tdescription: '${m.description}'")
 | 
			
		||||
	b.writeln("\tversion: '${m.version}'")
 | 
			
		||||
	b.writeln("\tauthor: '${m.author}'")
 | 
			
		||||
	b.writeln("\tlicense: '${m.license}'")
 | 
			
		||||
	b.writeln('\tdependencies: []')
 | 
			
		||||
	b.writeln('}')
 | 
			
		||||
	return b.str()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
	if !os.exists('v.mod') {
 | 
			
		||||
		vmod := make()
 | 
			
		||||
		os.write_file('v.mod', vmod) or {
 | 
			
		||||
			eprintln(err)
 | 
			
		||||
			exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		eprintln(term.bright_green('v.mod is done'))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	eprintln(term.bright_yellow('v.mod is already done'))
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user