aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/tmpls
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-17 19:21:52 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-17 19:21:52 +0800
commit89bf57f33a9f0f5a96fc50e272c83d926fa35c4a (patch)
treecc5a72e850bdd9215b60dc1655f162e22ee97d12 /mingling_core/tmpls
parent40bb7ffd6954184fac718c8f99c9cdc3e054e4eb (diff)
refactor!: replace build.rs with compile-time macro build steps
BREAKING CHANGE: Replace the `build`/`builds` feature system with compile-time macro-driven generation. `gen_program!()` now automatically invokes `build_comp!()` and `build_pathf!()` when the `comp`/`pathf` features are enabled, eliminating the need for `build.rs` and `[build-dependencies]` blocks. This removes the `build` feature, the `mingling::build` module, and all related build-time API functions. Completion scripts are now written to `{target_directory}/mingling/` instead of `target/release/`. The `mingling_cli` uses `build_comp!("mling")` for its custom binary name.
Diffstat (limited to 'mingling_core/tmpls')
-rw-r--r--mingling_core/tmpls/comps/bash.sh67
-rw-r--r--mingling_core/tmpls/comps/fish.fish120
-rw-r--r--mingling_core/tmpls/comps/pwsh.ps1136
-rw-r--r--mingling_core/tmpls/comps/zsh.zsh71
4 files changed, 0 insertions, 394 deletions
diff --git a/mingling_core/tmpls/comps/bash.sh b/mingling_core/tmpls/comps/bash.sh
deleted file mode 100644
index edec28d..0000000
--- a/mingling_core/tmpls/comps/bash.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env bash
-_<<<bin_name>>>_bash_completion() {
- local line="${COMP_LINE:0:COMP_POINT}"
- local cur="${line##* }"
- local prev=""
- local word_index=1
-
- local before="${line:0:$(( ${#line} - ${#cur} ))}"
- local -a before_words
- if [[ -n "$before" ]]; then
- read -ra before_words <<< "$before"
- word_index=$(( ${#before_words[@]} + 1 ))
- if [[ $word_index -gt 1 ]]; then
- prev="${before_words[${#before_words[@]}-1]}"
- fi
- fi
-
- local args=()
- args+=(-f "${COMP_LINE//-/^}")
- args+=(-C "$COMP_POINT")
- args+=(-w "${cur//-/^}")
- args+=(-p "${prev//-/^}")
- args+=(-c "${COMP_WORDS[0]//-/^}")
- args+=(-i "$word_index")
- args+=(-F "bash")
-
- for word in "${COMP_WORDS[@]}"; do
- args+=(-a "${word//-/^}")
- done
-
- local suggestions
- if suggestions=$(<<<bin_name>>> __comp "${args[@]}" 2>/dev/null); then
- if [ $? -eq 0 ]; then
- if [ "$suggestions" = "_file_" ]; then
- compopt -o default
- COMPREPLY=()
- return
- fi
-
- if [ -n "$suggestions" ]; then
- local -a all_suggestions filtered
- mapfile -t all_suggestions < <(printf '%s\n' "$suggestions")
-
- for suggestion in "${all_suggestions[@]}"; do
- [ -z "$cur" ] || [[ "$suggestion" == "$cur"* ]] && filtered+=("$suggestion")
- done
-
- if [ ${#filtered[@]} -gt 0 ]; then
- COMPREPLY=("${filtered[@]}")
- if [[ "$cur" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then
- local colon_prefix="${cur%"${cur##*:}"}"
- local -a ltrimmed=()
- for suggestion in "${COMPREPLY[@]}"; do
- ltrimmed+=("${suggestion#"$colon_prefix"}")
- done
- COMPREPLY=("${ltrimmed[@]}")
- fi
- fi
- return
- fi
- fi
- fi
-
- COMPREPLY=()
-}
-
-complete -F _<<<bin_name>>>_bash_completion <<<bin_name>>>
diff --git a/mingling_core/tmpls/comps/fish.fish b/mingling_core/tmpls/comps/fish.fish
deleted file mode 100644
index 64b4ed3..0000000
--- a/mingling_core/tmpls/comps/fish.fish
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env fish
-function __<<<bin_name>>>_fish_complete
- set -l cmdline (commandline -opc)
- set -l buffer (commandline -b)
- set -l cursor (commandline -C)
- set -l current_token (commandline -ct)
-
- set -l current_word ""
- set -l previous_word ""
- set -l word_index 0
- set -l char_count 0
-
- set -l found false
- if test -n "$current_token"
- for i in (seq (count $cmdline))
- if test "$cmdline[$i]" = "$current_token"
- set word_index $i
- set current_word $current_token
- if test $i -gt 1
- set previous_word $cmdline[(math $i - 1)]
- end
- set found true
- break
- end
- end
- end
-
- if not $found
- for i in (seq (count $cmdline))
- set word $cmdline[$i]
- if test $i -gt 1
- set char_count (math $char_count + 1)
- end
- set char_count (math $char_count + (string length -- "$word"))
-
- if test $cursor -le $char_count
- set word_index $i
- set current_word $word
- if test $i -gt 1
- set previous_word $cmdline[(math $i - 1)]
- end
- break
- end
- end
- end
-
- if test $word_index -eq 0 -a (count $cmdline) -gt 0
- set word_index (count $cmdline)
- if test -n "$current_token" -a "$current_token" != "$cmdline[-1]"
- set current_word $current_token
- else
- set current_word ""
- end
- set previous_word $cmdline[-1]
- end
-
- if test $word_index -gt (count $cmdline)
- set word_index (count $cmdline)
- end
-
- set -l buffer_replaced (string replace -a "-" "^" -- "$buffer")
- set -l current_word_replaced (string replace -a "-" "^" -- "$current_word")
- set -l previous_word_replaced (string replace -a "-" "^" -- "$previous_word")
-
- set -l args
- set -a args -f "$buffer_replaced" -C "$cursor" -w "$current_word_replaced" -p "$previous_word_replaced"
-
- if test (count $cmdline) -gt 0
- set -a args -c "$cmdline[1]"
- else
- set -a args -c ""
- end
-
- set -a args -i "$word_index"
-
- if test (count $cmdline) -gt 0
- set -l all_words_replaced
- for word in $cmdline
- set -a all_words_replaced (string replace -a "-" "^" -- "$word")
- end
-
- if test -n "$current_token" -a "$current_word" = "$current_token"
- set -l found_in_cmdline false
- for word in $cmdline
- if test "$word" = "$current_token"
- set found_in_cmdline true
- break
- end
- end
- if not $found_in_cmdline -a $word_index -eq (math (count $cmdline) + 1)
- set -a all_words_replaced (string replace -a "-" "^" -- "$current_token")
- end
- end
-
- set -a args -a $all_words_replaced
- else
- set -a args -a ""
- end
-
- set -a args -F "fish"
-
- set -l output
- if not <<<bin_name>>> __comp $args 2>/dev/null | read -z output
- return
- end
-
- set -l trimmed_output (string trim -- "$output")
- if test "$trimmed_output" = "_file_"
- __fish_complete_path "$current_word"
- return 0
- else if test -n "$trimmed_output"
- string split -n \n -- "$output" | while read -l line
- test -n "$line" && echo "$line"
- end
- return 0
- end
- return 1
-end
-
-complete -c <<<bin_name>>> -a '(__<<<bin_name>>>_fish_complete)' -f
diff --git a/mingling_core/tmpls/comps/pwsh.ps1 b/mingling_core/tmpls/comps/pwsh.ps1
deleted file mode 100644
index d72a027..0000000
--- a/mingling_core/tmpls/comps/pwsh.ps1
+++ /dev/null
@@ -1,136 +0,0 @@
-# PowerShell completion script for <<<bin_name>>>
-Register-ArgumentCompleter -Native -CommandName '<<<bin_name>>>' -ScriptBlock {
- param($wordToComplete, $commandAst, $cursorPosition)
-
- $line = $commandAst.ToString()
-
- $elements = @()
- if ($commandAst.CommandElements.Count -gt 0) {
- $elements = $commandAst.CommandElements | ForEach-Object { $_.Value }
- }
-
- $commandName = if ($elements.Count -gt 0) { $elements[0] } else { "" }
-
- $currentWord = $wordToComplete
- $previousWord = ""
- $wordIndex = 0
-
- $found = $false
- for ($i = 0; $i -lt $elements.Count; $i++) {
- if ($elements[$i] -eq $currentWord) {
- $wordIndex = $i + 1
- if ($i -gt 0) {
- $previousWord = $elements[$i - 1]
- }
- $found = $true
- break
- }
- }
-
- if (-not $found) {
- $wordIndex = $elements.Count + 1
- if ($elements.Count -gt 0) {
- $previousWord = $elements[-1]
- }
- }
-
- $args = @(
- "-C", $cursorPosition.ToString()
- "-i", $wordIndex.ToString()
- "-F", "Powershell"
- )
-
- if ($line) {
- $args += "-f"
- $args += ($line -replace '-', '^')
- }
- if ($currentWord) {
- $args += "-w"
- $args += ($currentWord -replace '-', '^')
- }
- if ($previousWord) {
- $args += "-p"
- $args += ($previousWord -replace '-', '^')
- }
- if ($commandName) {
- $args += "-c"
- $args += ($commandName -replace '-', '^')
- }
-
- foreach ($element in $elements) {
- if ($element) {
- $args += "-a"
- $args += ($element -replace '-', '^')
- }
- }
-
- $originalEncoding = [Console]::OutputEncoding
- $originalPSEncoding = $OutputEncoding
- [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
- $OutputEncoding = [System.Text.Encoding]::UTF8
-
- $output = & <<<bin_name>>> __comp $args 2>&1
-
- [Console]::OutputEncoding = $originalEncoding
- $OutputEncoding = $originalPSEncoding
-
- $output = $output -replace "`r`n", "`n" -replace "`r", "`n"
-
- if (-not $output) {
- return @()
- }
-
- $lines = $output -split "`n"
-
- if ($lines.Count -eq 0) {
- return @()
- }
-
- $firstLine = $lines[0].Trim()
-
- if ($firstLine -eq "_file_") {
- if ($lines.Count -gt 1) {
- $fileSuggestions = $lines[1..($lines.Count-1)]
- } else {
- $fileSuggestions = @()
- }
-
- $completionResults = @()
- $fileSuggestions | ForEach-Object {
- $path = $_
- $isDirectory = $path.EndsWith([System.IO.Path]::DirectorySeparatorChar) -or $path.EndsWith('/')
- $completionType = if ($isDirectory) { 'ProviderContainer' } else { 'ProviderItem' }
- $completionResults += [System.Management.Automation.CompletionResult]::new($path, $path, $completionType, $path)
- }
-
- return $completionResults
- } else {
- $completionResults = @()
-
- foreach ($line in $lines) {
- $trimmedLine = $line.Trim()
-
- if ($trimmedLine -match '^([^$]+)\$\((.+)\)$') {
- $text = $matches[1]
- $description = $matches[2]
- $completionResults += [System.Management.Automation.CompletionResult]::new(
- $text,
- $text,
- 'ParameterValue',
- $description
- )
- } else {
- $text = $trimmedLine
- $resultType = if ($text.StartsWith('-')) { 'ParameterName' } else { 'ParameterValue' }
- $completionResults += [System.Management.Automation.CompletionResult]::new(
- $text,
- $text,
- $resultType,
- $text
- )
- }
- }
-
- return $completionResults
- }
-}
diff --git a/mingling_core/tmpls/comps/zsh.zsh b/mingling_core/tmpls/comps/zsh.zsh
deleted file mode 100644
index 7cf5f7b..0000000
--- a/mingling_core/tmpls/comps/zsh.zsh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env zsh
-_<<<bin_name>>>_completion() {
- local -a args
- local suggestions
-
- local buffer="$BUFFER"
- local cursor="$CURSOR"
- local current_word="${words[$CURRENT]}"
- local previous_word=""
- local command_name="${words[1]}"
- local word_index="$CURRENT"
-
- if [[ $CURRENT -gt 1 ]]; then
- previous_word="${words[$((CURRENT-1))]}"
- fi
-
- args=(
- -f "${buffer//-/^}"
- -C "$cursor"
- -w "${current_word//-/^}"
- -p "${previous_word//-/^}"
- -c "$command_name"
- -i "$word_index"
- -a "${(@)words//-/^}"
- -F "zsh"
- )
-
- suggestions=$(<<<bin_name>>> __comp "${args[@]}" 2>/dev/null)
-
- if [[ $? -eq 0 ]] && [[ -n "$suggestions" ]]; then
- local -a completions
- completions=(${(f)suggestions})
-
- if [[ "${completions[1]}" == "_file_" ]]; then
- shift completions
- _files
- else
- local -a parsed_completions
- for item in "${completions[@]}"; do
- if [[ "$item" =~ '^([^$]+)\$\((.+)\)$' ]]; then
- parsed_completions+=("${match[1]//:/\\:}:${match[2]}")
- else
- parsed_completions+=("${item//:/\\:}")
- fi
- done
-
- if (( $+functions[_describe] )); then
- _describe '<<<bin_name>>> commands' parsed_completions
- else
- local -a simple_completions
- for item in "${completions[@]}"; do
- if [[ "$item" =~ '^([^$]+)\$\((.+)\)$' ]]; then
- simple_completions+=("${match[1]}")
- else
- simple_completions+=("$item")
- fi
- done
- compadd -a simple_completions
- fi
- fi
- fi
-}
-
-if (( $+functions[compdef] )); then
- compdef _<<<bin_name>>>_completion <<<bin_name>>>
- if [[ $? -ne 0 ]]; then
- compctl -K _<<<bin_name>>>_completion <<<bin_name>>>
- fi
-else
- compctl -K _<<<bin_name>>>_completion <<<bin_name>>>
-fi