-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Squashed 'zsh/.zsh/completion/external/zsh-better-npm-completion/' co…
…ntent from commit 47e5987c git-subtree-dir: zsh/.zsh/completion/external/zsh-better-npm-completion git-subtree-split: 47e5987ca422de43784f9d76311d764f82af2717
- Loading branch information
0 parents
commit ad72c72
Showing
5 changed files
with
244 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
github: | ||
- 'lukechilds' | ||
custom: | ||
- 'https://blockstream.info/address/1LukeQU5jwebXbMLDVydeH4vFSobRV9rkj' | ||
- 'https://blockstream.info/address/3Luke2qRn5iLj4NiFrvLBu2jaEj7JeMR6w' | ||
- 'https://blockstream.info/address/bc1qlukeyq0c69v97uss68fet26kjkcsrymd2kv6d4' | ||
- 'https://tippin.me/@lukechilds' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2016 Luke Childs | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
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 OR COPYRIGHT HOLDERS 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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# zsh-better-npm-completion | ||
|
||
> Better completion for `npm` | ||
[![GitHub Donate](https://badgen.net/badge/GitHub/Sponsor/D959A7?icon=github)](https://github.com/sponsors/lukechilds) | ||
[![Bitcoin Donate](https://badgen.net/badge/Bitcoin/Donate/F19537?icon=bitcoin)](https://lu.ke/tip/bitcoin) | ||
[![Lightning Donate](https://badgen.net/badge/Lightning/Donate/F6BC41?icon=bitcoin-lightning)](https://lu.ke/tip/lightning) | ||
|
||
<img src="demo.gif" width="690"> | ||
|
||
* Makes `npm install` recommendations from npm cache | ||
* Makes `npm uninstall` recommendations from `dependencies`/`devDependencies` | ||
* Shows detailed information on script contents for `npm run` | ||
* Falls back to default npm completions if we don't have anything better | ||
|
||
## Installation | ||
|
||
### Using [Antigen](https://github.com/zsh-users/antigen) | ||
|
||
Bundle `zsh-better-npm-completion` in your `.zshrc` | ||
|
||
```shell | ||
antigen bundle lukechilds/zsh-better-npm-completion | ||
``` | ||
|
||
### Using [zplug](https://github.com/b4b4r07/zplug) | ||
Load `zsh-better-npm-completion` as a plugin in your `.zshrc` | ||
|
||
```shell | ||
zplug "lukechilds/zsh-better-npm-completion", defer:2 | ||
|
||
``` | ||
### Using [zgen](https://github.com/tarjoilija/zgen) | ||
|
||
Include the load command in your `.zshrc` | ||
|
||
```shell | ||
zgen load lukechilds/zsh-better-npm-completion | ||
``` | ||
|
||
### As an [Oh My ZSH!](https://github.com/robbyrussell/oh-my-zsh) custom plugin | ||
|
||
Clone `zsh-better-npm-completion` into your custom plugins repo | ||
|
||
```shell | ||
git clone https://github.com/lukechilds/zsh-better-npm-completion ~/.oh-my-zsh/custom/plugins/zsh-better-npm-completion | ||
``` | ||
Then load as a plugin in your `.zshrc` | ||
|
||
```shell | ||
plugins+=(zsh-better-npm-completion) | ||
``` | ||
|
||
### Manually | ||
Clone this repository somewhere (`~/.zsh-better-npm-completion` for example) | ||
|
||
```shell | ||
git clone https://github.com/lukechilds/zsh-better-npm-completion.git ~/.zsh-better-npm-completion | ||
``` | ||
Then source it in your `.zshrc` | ||
|
||
```shell | ||
source ~/.zsh-better-npm-completion/zsh-better-npm-completion.plugin.zsh | ||
``` | ||
|
||
## Related | ||
|
||
- [`zsh-nvm`](https://github.com/lukechilds/zsh-nvm) - Zsh plugin for installing, updating and loading `nvm` | ||
- [`gifgen`](https://github.com/lukechilds/gifgen) - Simple high quality GIF encoding | ||
|
||
## License | ||
|
||
MIT © Luke Childs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
_zbnc_npm_command() { | ||
echo "${words[2]}" | ||
} | ||
|
||
_zbnc_npm_command_arg() { | ||
echo "${words[3]}" | ||
} | ||
|
||
_zbnc_no_of_npm_args() { | ||
echo "$#words" | ||
} | ||
|
||
_zbnc_list_cached_modules() { | ||
ls ~/.npm 2>/dev/null | ||
} | ||
|
||
_zbnc_recursively_look_for() { | ||
local filename="$1" | ||
local dir=$PWD | ||
while [ ! -e "$dir/$filename" ]; do | ||
dir=${dir%/*} | ||
[[ "$dir" = "" ]] && break | ||
done | ||
[[ ! "$dir" = "" ]] && echo "$dir/$filename" | ||
} | ||
|
||
_zbnc_get_package_json_property_object() { | ||
local package_json="$1" | ||
local property="$2" | ||
cat "$package_json" | | ||
sed -nE "/^ \"$property\": \{$/,/^ \},?$/p" | # Grab scripts object | ||
sed '1d;$d' | # Remove first/last lines | ||
sed -E 's/ "([^"]+)": "(.+)",?/\1=>\2/' # Parse into key=>value | ||
} | ||
|
||
_zbnc_get_package_json_property_object_keys() { | ||
local package_json="$1" | ||
local property="$2" | ||
_zbnc_get_package_json_property_object "$package_json" "$property" | cut -f 1 -d "=" | ||
} | ||
|
||
_zbnc_parse_package_json_for_script_suggestions() { | ||
local package_json="$1" | ||
_zbnc_get_package_json_property_object "$package_json" scripts | | ||
sed -E 's/(.+)=>(.+)/\1:$ \2/' | # Parse commands into suggestions | ||
sed 's/\(:\)[^$]/\\&/g' | # Escape ":" in commands | ||
sed 's/\(:\)$[^ ]/\\&/g' # Escape ":$" without a space in commands | ||
} | ||
|
||
_zbnc_parse_package_json_for_deps() { | ||
local package_json="$1" | ||
_zbnc_get_package_json_property_object_keys "$package_json" dependencies | ||
_zbnc_get_package_json_property_object_keys "$package_json" devDependencies | ||
} | ||
|
||
_zbnc_npm_install_completion() { | ||
|
||
# Only run on `npm install ?` | ||
[[ ! "$(_zbnc_no_of_npm_args)" = "3" ]] && return | ||
|
||
# Return if we don't have any cached modules | ||
[[ "$(_zbnc_list_cached_modules)" = "" ]] && return | ||
|
||
# If we do, recommend them | ||
_values $(_zbnc_list_cached_modules) | ||
|
||
# Make sure we don't run default completion | ||
custom_completion=true | ||
} | ||
|
||
_zbnc_npm_uninstall_completion() { | ||
|
||
# Use default npm completion to recommend global modules | ||
[[ "$(_zbnc_npm_command_arg)" = "-g" ]] || [[ "$(_zbnc_npm_command_arg)" = "--global" ]] && return | ||
|
||
# Look for a package.json file | ||
local package_json="$(_zbnc_recursively_look_for package.json)" | ||
|
||
# Return if we can't find package.json | ||
[[ "$package_json" = "" ]] && return | ||
|
||
_values $(_zbnc_parse_package_json_for_deps "$package_json") | ||
|
||
# Make sure we don't run default completion | ||
custom_completion=true | ||
} | ||
|
||
_zbnc_npm_run_completion() { | ||
|
||
# Only run on `npm run ?` | ||
[[ ! "$(_zbnc_no_of_npm_args)" = "3" ]] && return | ||
|
||
# Look for a package.json file | ||
local package_json="$(_zbnc_recursively_look_for package.json)" | ||
|
||
# Return if we can't find package.json | ||
[[ "$package_json" = "" ]] && return | ||
|
||
# Parse scripts in package.json | ||
local -a options | ||
options=(${(f)"$(_zbnc_parse_package_json_for_script_suggestions $package_json)"}) | ||
|
||
# Return if we can't parse it | ||
[[ "$#options" = 0 ]] && return | ||
|
||
# Load the completions | ||
_describe 'values' options | ||
|
||
# Make sure we don't run default completion | ||
custom_completion=true | ||
} | ||
|
||
_zbnc_default_npm_completion() { | ||
compadd -- $(COMP_CWORD=$((CURRENT-1)) \ | ||
COMP_LINE=$BUFFER \ | ||
COMP_POINT=0 \ | ||
npm completion -- "${words[@]}" \ | ||
2>/dev/null) | ||
} | ||
|
||
_zbnc_zsh_better_npm_completion() { | ||
|
||
# Store custom completion status | ||
local custom_completion=false | ||
|
||
# Load custom completion commands | ||
case "$(_zbnc_npm_command)" in | ||
i|install) | ||
_zbnc_npm_install_completion | ||
;; | ||
r|uninstall) | ||
_zbnc_npm_uninstall_completion | ||
;; | ||
run) | ||
_zbnc_npm_run_completion | ||
;; | ||
esac | ||
|
||
# Fall back to default completion if we haven't done a custom one | ||
[[ $custom_completion = false ]] && _zbnc_default_npm_completion | ||
} | ||
|
||
compdef _zbnc_zsh_better_npm_completion npm |