release
This commit is contained in:
13
README.md
Normal file
13
README.md
Normal file
@ -0,0 +1,13 @@
|
||||
# V Documentation Server
|
||||
|
||||
Synopsis:
|
||||
|
||||
```
|
||||
generate and serve HTML documentation for V module
|
||||
|
||||
usage: vdocs [-l addr:port] [<dir>]
|
||||
|
||||
options:
|
||||
-help print this help message and exit
|
||||
-l, -listen listen address, 127.0.0.1:4000 by default
|
||||
```
|
22
UNLICENSE
Normal file
22
UNLICENSE
Normal file
@ -0,0 +1,22 @@
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of relinquishment in
|
||||
perpetuity of all present and future rights to this software under copyright
|
||||
law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <http://unlicense.org/>
|
6
v.mod
6
v.mod
@ -1,7 +1,7 @@
|
||||
Module {
|
||||
name: 'vdocserve'
|
||||
description: 'Generate and serve module documentation'
|
||||
name: 'vdocs'
|
||||
description: 'Generate and serve V module documentation'
|
||||
version: '0.1.0'
|
||||
license: 'MIT'
|
||||
license: 'Unlicense'
|
||||
dependencies: []
|
||||
}
|
||||
|
60
vdocs.v
Normal file
60
vdocs.v
Normal file
@ -0,0 +1,60 @@
|
||||
module main
|
||||
|
||||
import flag
|
||||
import log
|
||||
import net.http.file
|
||||
import os
|
||||
import rand
|
||||
import v.vmod
|
||||
|
||||
struct FlagConfig {
|
||||
mut:
|
||||
help bool
|
||||
listen string = '127.0.0.1:4000' @[short: l]
|
||||
dir string @[ignore]
|
||||
}
|
||||
|
||||
fn main() {
|
||||
mut flags, no_matches := flag.to_struct[FlagConfig](os.args, skip: 1, style: .go_flag) or {
|
||||
eprintln('cmdline parsing error, see -help for info')
|
||||
exit(2)
|
||||
}
|
||||
if no_matches.len == 0 {
|
||||
flags.dir = '.'
|
||||
} else if no_matches.len == 1 {
|
||||
flags.dir = no_matches[0]
|
||||
} else {
|
||||
eprintln('unrecognized arguments: ${no_matches[1..]}')
|
||||
exit(2)
|
||||
}
|
||||
if flags.help {
|
||||
println('generate and serve HTML documentation for V module')
|
||||
println('')
|
||||
println('usage: vdocs [-l addr:port] [<dir>]')
|
||||
println('')
|
||||
println('options:')
|
||||
println(' -help print this help message and exit')
|
||||
println(' -l, -listen listen address, 127.0.0.1:4000 by default')
|
||||
exit(0)
|
||||
}
|
||||
mut cache := vmod.get_cache()
|
||||
modfile := cache.get_by_folder(os.getwd())
|
||||
modname := vmod.from_file(modfile.vmod_file)!.name
|
||||
tmp_dir := os.join_path(os.temp_dir(), os.geteuid().str(), modname + '_docs_' + rand.u32().hex())
|
||||
log.info('generate HTML docs...')
|
||||
os.mkdir_all(tmp_dir, mode: 0o755)!
|
||||
os.execute_or_exit('v doc -f html -o ${tmp_dir} -m ${flags.dir} ')
|
||||
signal_callback := fn [tmp_dir] (_ os.Signal) {
|
||||
eprintln('\rCleanup...')
|
||||
os.rmdir_all(tmp_dir) or {
|
||||
log.error('unable to delete temporary dir ${tmp_dir}')
|
||||
exit(1)
|
||||
}
|
||||
exit(0)
|
||||
}
|
||||
os.signal_opt(.int, signal_callback)!
|
||||
os.signal_opt(.term, signal_callback)!
|
||||
log.info('docs stored in temporary dir ${tmp_dir}')
|
||||
log.info('use ^C to quit server')
|
||||
file.serve(folder: tmp_dir, index_file: modname + '.html', on: flags.listen)
|
||||
}
|
42
vdocserve.v
42
vdocserve.v
@ -1,42 +0,0 @@
|
||||
module main
|
||||
|
||||
import flag
|
||||
import log
|
||||
import net.http.file
|
||||
import os
|
||||
import rand
|
||||
import v.vmod
|
||||
|
||||
fn main() {
|
||||
mut fp := flag.new_flag_parser(os.args)
|
||||
fp.application('vdocserve')
|
||||
fp.description('generate and serve V module HTML documentation')
|
||||
fp.version('0.1.0')
|
||||
fp.skip_executable()
|
||||
fp.limit_free_args(0, 2)!
|
||||
listen := fp.string('listen', u8(`l`), '127.0.0.1:4000', 'HTTP server listen address:port')
|
||||
fp.finalize() or {
|
||||
eprintln(err)
|
||||
println(fp.usage())
|
||||
exit(1)
|
||||
}
|
||||
mut cache := vmod.get_cache()
|
||||
modfile := cache.get_by_folder(os.getwd())
|
||||
modname := vmod.from_file(modfile.vmod_file)!.name
|
||||
docs_dir := os.join_path(os.temp_dir(), os.geteuid().str(), modname + '_docs_' +
|
||||
rand.u16().hex())
|
||||
log.info('generating HTML docs in temporary dir ${docs_dir}')
|
||||
os.mkdir_all(docs_dir, mode: 0o755)!
|
||||
os.execute_or_exit('v doc -f html -o ${docs_dir} -m . ')
|
||||
sigint_callback := fn [docs_dir] (_ os.Signal) {
|
||||
os.rmdir_all(docs_dir) or {
|
||||
log.error('unable to delete temporary dir ${docs_dir}')
|
||||
exit(1)
|
||||
}
|
||||
eprintln('cleanup temporary data')
|
||||
exit(0)
|
||||
}
|
||||
os.signal_opt(.int, sigint_callback)!
|
||||
log.info('starting docs server, use ^C to quit')
|
||||
file.serve(folder: docs_dir, index_file: modname + '.html', on: listen)
|
||||
}
|
Reference in New Issue
Block a user