Comments (16)
I have opened a question on stackoverflow.
from yarn-completion.
Thank you @dsifford for your support;
Makeing the mentioned bash release http://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz from source locally, the following result nailed it for me.
~$ echo $BASH_VERSION
4.4.0(1)-release
~$ declare testa
~$ declare -p testa
declare -- testa
from yarn-completion.
@joma74 Thanks for the report.
Am I reading your output correctly? I'm seeing you calling __yarn_get_package_fields
directly? Is that correct?
If so, why do you need to do that?
from yarn-completion.
Hey dsifford,
No, guess that belongs to the console output after the exit happened. My input ends after yarn
followed by a tab.
from yarn-completion.
Hm..
I have no idea why you might be getting that error to be honest, because at no point ever could that particular error occur given that counter
and cmd
are set explicitly before the first and only call of __yarn_get_command
. (https://github.com/dsifford/yarn-completion/blob/master/yarn-completion.bash#L745-L747)
Try to maybe comment out the check lines and see if that resolves it for you.
from yarn-completion.
Yes, and it seems that declare cmd
without a value assignment makes the check not pass.
This is the debug output i'd prefered to give in the first description. Forgot again that set -x
applies local only. Input is yarn
followed by a tab. The console output following is due to the set -x
.
vagrant@homestead:~$ yarn + declare 'prev_comp_wordbreaks=
"'\''><=;|&(:'
+ COMP_WORDBREAKS='"'\''><=;|&(: '
+ declare cur prev words cword
+ commands=(access add autoclean bin cache check config create exec generate-lock-entry global help import info init install licenses link list login logout node outdated owner pack publish remove run tag team unlink upgrade upgrade-interactive version versions workspace workspaces why $(__yarn_get_package_fields scripts))
++ __yarn_get_package_fields scripts
++ declare field_key
++ declare field_type=object
++ declare package_dot_json
+++ pwd
++ package_dot_json=/home/vagrant/package.json
++ declare OPTIND OPTARG opt
++ getopts :gt: opt
++ shift 0
++ field_key='"scripts"'
++ [[ ! -f /home/vagrant/package.json ]]
++ return
+ declare commands
+ global_flags=(--cache-folder --check-files --cwd --emoji --flat --force --frozen-lockfile --global-folder --har --help --https-proxy --ignore-engines --ignore-optional --ignore-platform --ignore-scripts --json --link-duplicates --link-folder --modules-folder --mutex --network-concurrency --network-timeout --no-bin-links --no-emoji --no-lockfile --no-progress --non-interactive --offline --prefer-offline --preferred-cache-folder --prod --production --proxy --pure-lockfile --scripts-prepend-node-path --silent --skip-integrity-check --strict-semver --verbose --version)
+ declare global_flags
+ COMPREPLY=()
+ command -v _init_completion
+ _init_completion
+ local exclude= flag outx errx inx OPTIND=1
+ getopts n:e:o:i:s flag
+ COMPREPLY=()
+ local 'redir=@(?([0-9])<|?([0-9&])>?(>)|>&)'
+ _get_comp_words_by_ref -n '<>&' cur prev words cword
+ local exclude flag i OPTIND=1
+ words=()
+ local cur cword words
+ upargs=()
+ upvars=()
+ local upargs upvars vcur vcword vprev vwords
+ getopts c:i:n:p:w: flag -n '<>&' cur prev words cword
+ case $flag in
+ exclude='<>&'
+ getopts c:i:n:p:w: flag -n '<>&' cur prev words cword
+ [[ 6 -ge 3 ]]
+ case ${!OPTIND} in
+ vcur=cur
+ let 'OPTIND += 1'
+ [[ 6 -ge 4 ]]
+ case ${!OPTIND} in
+ vprev=prev
+ let 'OPTIND += 1'
+ [[ 6 -ge 5 ]]
+ case ${!OPTIND} in
+ vwords=words
+ let 'OPTIND += 1'
+ [[ 6 -ge 6 ]]
+ case ${!OPTIND} in
+ vcword=cword
+ let 'OPTIND += 1'
+ [[ 6 -ge 7 ]]
+ __get_cword_at_cursor_by_ref '<>&' words cword cur
+ words=()
+ local cword words
+ __reassemble_comp_words_by_ref '<>&' words cword
+ local exclude i j line ref
+ [[ -n <>& ]]
+ exclude='<>&'
+ eval cword=1
++ cword=1
+ [[ -n <>& ]]
+ line='yarn '
+ (( i=0, j=0 ))
+ (( i < 2 ))
+ [[ 0 -gt 0 ]]
+ ref='words[0]'
+ eval 'words[0]=${!ref}${COMP_WORDS[i]}'
++ words[0]=yarn
+ line=' '
+ [[ 0 == 1 ]]
+ (( i++, j++ ))
+ (( i < 2 ))
+ [[ 1 -gt 0 ]]
+ [[ '' == +([<>&]) ]]
+ ref='words[1]'
+ eval 'words[1]=${!ref}${COMP_WORDS[i]}'
++ words[1]=
+ line=' '
+ [[ 1 == 1 ]]
+ eval cword=1
++ cword=1
+ (( i++, j++ ))
+ (( i < 2 ))
+ [[ 2 == 1 ]]
+ local i cur index=5 'lead=yarn '
+ [[ 5 -gt 0 ]]
+ [[ -n yarn ]]
+ [[ -n yarn ]]
+ cur='yarn '
+ (( i = 0 ))
+ (( i <= cword ))
+ [[ 5 -ge 4 ]]
+ [[ yarn != \y\a\r\n ]]
+ [[ 0 -lt 1 ]]
+ local old_size=5
+ cur=' '
+ local new_size=1
+ index=1
+ (( ++i ))
+ (( i <= cword ))
+ [[ 1 -ge 0 ]]
+ [[ '' != '' ]]
+ [[ 1 -lt 1 ]]
+ (( ++i ))
+ (( i <= cword ))
+ [[ -n ]]
+ [[ ! -n '' ]]
+ cur=
+ [[ 1 -lt 0 ]]
+ local words cword cur
+ _upvars -a2 words yarn '' -v cword 1 -v cur ''
+ (( 10 ))
+ (( 10 ))
+ case $1 in
+ [[ -n 2 ]]
+ printf %d 2
+ [[ -n words ]]
+ unset -v words
+ eval 'words=("${@:3:2}")'
++ words=("${@:3:2}")
+ shift 4
+ (( 6 ))
+ case $1 in
+ [[ -n cword ]]
+ unset -v cword
+ eval 'cword="$3"'
++ cword=1
+ shift 3
+ (( 3 ))
+ case $1 in
+ [[ -n cur ]]
+ unset -v cur
+ eval 'cur="$3"'
++ cur=
+ shift 3
+ (( 0 ))
+ [[ -n cur ]]
+ upvars+=("$vcur")
+ upargs+=(-v $vcur "$cur")
+ [[ -n cword ]]
+ upvars+=("$vcword")
+ upargs+=(-v $vcword "$cword")
+ [[ -n prev ]]
+ [[ 1 -ge 1 ]]
+ upvars+=("$vprev")
+ upargs+=(-v $vprev "${words[cword - 1]}")
+ [[ -n words ]]
+ upvars+=("$vwords")
+ upargs+=(-a${#words[@]} $vwords "${words[@]}")
+ (( 4 ))
+ local cur cword prev words
+ _upvars -v cur '' -v cword 1 -v prev yarn -a2 words yarn ''
+ (( 13 ))
+ (( 13 ))
+ case $1 in
+ [[ -n cur ]]
+ unset -v cur
+ eval 'cur="$3"'
++ cur=
+ shift 3
+ (( 10 ))
+ case $1 in
+ [[ -n cword ]]
+ unset -v cword
+ eval 'cword="$3"'
++ cword=1
+ shift 3
+ (( 7 ))
+ case $1 in
+ [[ -n prev ]]
+ unset -v prev
+ eval 'prev="$3"'
++ prev=yarn
+ shift 3
+ (( 4 ))
+ case $1 in
+ [[ -n 2 ]]
+ printf %d 2
+ [[ -n words ]]
+ unset -v words
+ eval 'words=("${@:3:2}")'
++ words=("${@:3:2}")
+ shift 4
+ (( 0 ))
+ _variables
+ [[ '' =~ ^(\$\{?)([A-Za-z0-9_]*)$ ]]
+ return 1
+ [[ '' == @(?([0-9])<|?([0-9&])>?(>)|>&)* ]]
+ [[ yarn == @(?([0-9])<|?([0-9&])>?(>)|>&) ]]
+ local i skip
+ (( i=1 ))
+ (( i < 2 ))
+ [[ '' == @(?([0-9])<|?([0-9&])>?(>)|>&)* ]]
+ i=2
+ (( 1 ))
+ (( i < 2 ))
+ [[ 1 -le 0 ]]
+ prev=yarn
+ [[ -n '' ]]
+ return 0
+ declare cmd
+ declare -i counter=1
+ __yarn_get_command
++ awk '{ printf "%s", $2 }'
++ declare -p counter cmd
+ [[ -i == \-\i\-\- ]]
+ echo '"counter" and "cmd" must be set by the caller and be the appropriate type'
"counter" and "cmd" must be set by the caller and be the appropriate type
+ exit 1
logout
++ '[' 1 = 1 ']'
++ '[' -x /usr/bin/clear_console ']'
++ /usr/bin/clear_console -q
Connection to 127.0.0.1 closed.
from yarn-completion.
Thanks for the trace.
What is the output of declare -p BASH_VERSION
in the environment that this issue is occurring in?
from yarn-completion.
Here it is
vagrant@homestead:~/code$ declare -p BASH_VERSION
declare -- BASH_VERSION="4.3.48(1)-release"
from yarn-completion.
Super strange....
The issue is right here:
+ declare cmd # <--------- cmd is definitely being declared
+ declare -i counter=1
+ __yarn_get_command
++ awk '{ printf "%s", $2 }'
++ declare -p counter cmd
+ [[ -i == \-\i\-\- ]] # <------- `declare -p counter cmd` is only seeing `counter` here
For whatever reason, the system you're on is either not registering cmd
or not printing a --
when the declare -p
statement is invoked.
I can't fathom why this would be happening to you. I've been able to use this on several different linux distributions and osx high sierra with no problems.
Did you say that removing the check resolves the issue for you? Everything works without it, correct?
If so, the easiest fix would be for me to just pitch those lines. Looks like it might be a bash bug in that specific version of bash you're using. I'm using 4.4.19(1)-release
.
from yarn-completion.
Hm, happens also on an up-to-date Ubuntu 16.04, not the former vagrant VM, despite the same bash version and nearly same Ubuntu OS.
joma@edison:~$ uname -a
Linux edison 4.13.0-38-generic #43~16.04.1-Ubuntu SMP Wed Mar 14 17:48:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
joma@edison:~$ bash --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
joma@edison:~$ . ~/.yarn-completion
joma@edison:~$ bash
joma@edison:~$ . ~/.yarn-completion
joma@edison:~$ yarn "counter" and "cmd" must be set by the caller and be the appropriate type
exit
from yarn-completion.
Could not find a definitive reference for this behaviour. Consider the following.
joma@edison:~$ declare testa
joma@edison:~$ declare -p testa
bash: declare: testa: not found
joma@edison:~$ declare testa=
joma@edison:~$ declare -p testa
declare -- testa=""
joma@edison:~$ echo $0
bash
Workaround in the script of yours was declare cmd=
from yarn-completion.
I've got no problem adding in the equal sign if that fixes your issue, but assuming you've now tested on different bash versions, I think you might have an issue somewhere in your bash init scripts that is screwing up how bash is supposed to fundamentally work.
According to the GNU Bash manual for the declare
builtin, it states...
[...] If a variable name is followed by =value, the value of the variable is set to value.
Also, the interface of the command is defined as...
declare [-aAfFgilnrtux] [-p] [name[=value] …]
which means that =value
is not required (including the equal sign).
Also, of note: This project has been used by hundreds of different people and this issue has never been reported by anybody else. So that leads me to believe that it's an issue localized to your machine only.
TL;DR: Sure, I'll totally add in the equal sign if that's all it takes for this to work for you, but I would definitely look into you init scripts to make sure something isn't written that is screwing up how declare is supposed to work.
from yarn-completion.
Gathering, just another indication from my heroku box. 4.3.48(1)-release eeeeverywheeeere I go 😏
joma@edison:~/entwicklung/nodews/onesrv$ heroku run bash
Running bash on ⬢ onesrv... up, run.3954 (Free)
~ $ uname -a
Linux 0246eb53-d945-47f6-95af-b24cfe9d23c5 4.4.0-1011-aws #11-Ubuntu SMP Fri Jan 12 23:24:17 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
~ $ bash --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
~ $ declare testa
~ $ declare -p testa
bash: declare: testa: not found
~ $ declare testa=
~ $ declare -p testa
declare -- testa=""
from yarn-completion.
Gathering, just a first contraindication GNU bash, version 4.4.12(1)-release
~$ declare testa
~$ declare -p testa
declare -- testa
~$ bash --version
GNU bash, version 4.4.12(1)-release
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
from yarn-completion.
Looks like you may have uncovered a bug in bash 4.3.48
.
Any chance you can update to 4.4.x
on your affected machine to confirm?
from yarn-completion.
Looking over your comment thread on stackoverflow now and I think you hit the nail on the head with your comment..
Can this be related to the bash 4.4 relase, Entry "f. The `-p' option to declare and similar builtins will display attributes for named variables even when those variables have not been assigned values (which are technically unset)."?
I'll add in the equals sign since people on bash < 4.4 might run into this.
Nice detective work.
from yarn-completion.
Related Issues (20)
- Feature request: support workspaces run through scripts HOT 3
- use package name instead of directory basename for workspace HOT 1
- How can we plug this into our own bash autocompletions? HOT 9
- Feature request: NPM repository autocomplete HOT 1
- Colon-contained completion glitches HOT 2
- Zsh support? HOT 6
- Version number error with 1.14.0? HOT 1
- Homebrew 0.14.0 upgrade issue HOT 1
- Tests are failing HOT 4
- Workspace package completion HOT 11
- Tests fail on latest yarn HOT 1
- Add it to bashit HOT 2
- Git-Bash completions HOT 2
- installing yarn completions under .local/share/bash-completion fails HOT 1
- Targets with a : don't work correctly (special characters require escaping) HOT 12
- Yarn v2/berry support ? HOT 3
- Excellent work HOT 1
- Fix build HOT 1
- Incorrect suggestion with script name with colon :
- Incorrect suggestion with script name with colon `:`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yarn-completion.