Giter VIP home page Giter VIP logo

Comments (16)

joma74 avatar joma74 commented on June 9, 2024 1

I have opened a question on stackoverflow.

from yarn-completion.

joma74 avatar joma74 commented on June 9, 2024 1

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.

dsifford avatar dsifford commented on June 9, 2024

@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.

joma74 avatar joma74 commented on June 9, 2024

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.

dsifford avatar dsifford commented on June 9, 2024

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.

joma74 avatar joma74 commented on June 9, 2024

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.

dsifford avatar dsifford commented on June 9, 2024

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.

joma74 avatar joma74 commented on June 9, 2024

Here it is

vagrant@homestead:~/code$ declare -p BASH_VERSION
declare -- BASH_VERSION="4.3.48(1)-release"

from yarn-completion.

dsifford avatar dsifford commented on June 9, 2024

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.

joma74 avatar joma74 commented on June 9, 2024

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.

joma74 avatar joma74 commented on June 9, 2024

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.

dsifford avatar dsifford commented on June 9, 2024

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.

joma74 avatar joma74 commented on June 9, 2024

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.

joma74 avatar joma74 commented on June 9, 2024

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.

dsifford avatar dsifford commented on June 9, 2024

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.

dsifford avatar dsifford commented on June 9, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.