This commit is contained in:
ge
2025-01-22 03:23:08 +03:00
commit d5931aa5e0
13 changed files with 8849 additions and 0 deletions

54
examples/getlicense.v Normal file
View 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
View 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'))
}