clap/scripts/gen_readme.nu
2023-01-24 16:17:31 +08:00

51 lines
1.9 KiB
Text
Executable file

#!/usr/bin/env nu
let example_file = "examples/sub_subcommands.rs"
def generate_url [baseurl: string, ...path: string] {
[$baseurl]
|append $path
|str join '/'
}
def generate_preamble [user: string, repo: string] {
let baseurl = "https://img.shields.io"
let crates = "https://crates.io"
let docs = "https://docs.rs"
let github = "https://github.com"
let branch = "main"
$"# ($repo)\n
Generates [Nushell]\((generate_url $github nushell/nushell)\) completions for [`clap`]\((generate_url $github clap-rs/clap)\) based CLIs\n
[![Crates.io]\((generate_url $baseurl crates/v $repo)\)]\((generate_url $crates crates $repo)\)
[![Crates.io]\((generate_url $baseurl crates/d $repo)\)]\((generate_url $crates crates $repo)\)
[![License]\((generate_url $baseurl github/license $user)/(generate_url $repo)\)]\(LICENSE\)
[![docs.rs]\((generate_url $baseurl docsrs $repo)\)]\((generate_url $docs $repo)\)
[![Build Status]\((generate_url $baseurl github/actions/workflow/status $user $repo ci.yml)\)]\((generate_url $github $user $repo actions/workflows/ci.yml?query=branch%3A($branch))\)
[![GitHub last commit]\((generate_url $baseurl github/last-commit $user $repo)\)]\((generate_url $github $user $repo commits/($branch))\)\n\n"
}
def code_to_md [title: string, lang: string, code: string] {
$"### ($title)\n\n```($lang)\n($code)\n```\n"
}
def generate_md [file: path] {
let package = (open Cargo.toml | get package)
let user = ($package.authors | first | str replace ' <.*@.*>$' '')
let repo = $package.name
let stem = ($file | path parse | get stem)
let rust_code = (open -r $file)
let nu_code = (cargo run --quiet --example $stem)
let rust_example = (code_to_md myapp.rs rust $rust_code)
let nu_example = (code_to_md myapp.nu nu $nu_code)
generate_preamble $user $repo
|lines
|append "## Examples\n"
|append $rust_example
|append $nu_example
|str join "\n"
|save -r -f README.md
}
generate_md $example_file