Ctags: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рд╕рдордЭреЗ "ctags: рдЪреЗрддрд╛рд╡рдиреА: рдЕрд╢рдХреНрдд рдЯреИрдЧ рдХреА рдЕрдирджреЗрдЦреА"

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдкреНрд░реИрд▓ 2016  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: universal-ctags/ctags

[yamato@x201]~/var/ctags-github% cat /tmp/foo.js 
if (true) {
    this[0] = function() {};
}

[yamato@x201]~/var/ctags-github% ./ctags -o - /tmp/foo.js 
ctags: Warning: ignoring null tag in /tmp/foo.js(line: 2)
[yamato@x201]~/var/ctags-github% js /tmp/foo.js 
[yamato@x201]~/var/ctags-github%
Parser buenhancement

рд╕рднреА 18 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ?

рдпрд╛ рдореБрдЭ рд╕реЗ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдореИрдВ рдЬрд┐рд╕ рдХреЛрдб рдХреЛ рдЯреИрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ :)

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдпрд╣ рд╡рд╕реНрддреБ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:

    const { name, email } = user;

рдореИрдВрдиреЗ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЗрдирдкреБрдЯ рдорд╛рдиреНрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдиреЛрдб рдХрдорд╛рдВрдб рдкрд░ рдЗрдирдкреБрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдерд╛
рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред
рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
Https://github.com/universal-ctags/ctags/issues/1949#issuecomment -457829914 рджреЗрдЦреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреИрд╕реЗ рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ред

const { name, email } = user;

name рдФрд░ email рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


[yamato@slave]~% node
> var user = {name: 'a', email: 'b'}
var user = {name: 'a', email: 'b'}
undefined
> const { name, email } = user;
const { name, email } = user;
undefined
> name
name
'a'

рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╕рд╡рд╛рд▓ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ ECMAScript рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╣реИ:
https://www.ecma-international.org/ecma-262/6.0/#sec -destructuring-рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ

:)

рдзрдиреНрдпрд╡рд╛рджред рдпрд╣реА рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред рдпрд╣реА рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдПред

рдЖрдкрдиреЗ рдЪреЗрддрд╛рд╡рдиреА рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓реА?

рдЖрдкрдиреЗ рдЪреЗрддрд╛рд╡рдиреА рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓реА?

рдореИрдВрдиреЗ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рдирд┐рдХрд╛рд▓реАред

рдЖрдкрдиреЗ рдЪреЗрддрд╛рд╡рдиреА рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓реА?

рдореИрдВрдиреЗ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рдирд┐рдХрд╛рд▓реАред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓рд╛ рд╣реИ, {A, B} = some_obj ctags рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ

рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдмрдВрдзрди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдХреЛрд╢рд┐рд╢ рдХреАред

[jet@living]/tmp% cd /tmp
cd /tmp
[jet@living]/tmp% git clone https://github.com/masatake/ctags.git
git clone https://github.com/masatake/ctags.git
Cloning into 'ctags'...
...
[jet@living]/tmp% cd ctags
cd ctags
[jet@living]/tmp/ctags% git checkout  origin/js-destructual-binding 
git checkout  origin/js-destructual-binding 
Note: switching to 'origin/js-destructual-binding'.
...
HEAD is now at 4eeac5b9 JavaScript: support more forms of destructuring assignments
[jet@living]/tmp/ctags% bash ./autogen.sh
bash ./autogen.sh
+ type autoreconf
...
optlib2c: translating optlib/inko.ctags to optlib/inko.c
+ ./misc/optlib2c optlib/inko.ctags
+ exit 0
[jet@living]/tmp/ctags% ./configure
./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
config.status: creating config.h
config.status: executing depfiles commands
[jet@living]/tmp/ctags% make -j 9
make -j 9
REPOINFO   main/repoinfo.h
make  all-recursive
make[1]: Entering directory '/tmp/ctags'
make[2]: Entering directory '/tmp/ctags'
...
  AR       libctags.a
  CCLD     ctags
  CCLD     mini-geany
make[2]: Leaving directory '/tmp/ctags'
make[1]: Leaving directory '/tmp/ctags'
[jet@living]/tmp/ctags% cat /tmp/bar.js 
cat /tmp/bar.js 
const { name, email } = user;

[jet@living]/tmp/ctags% ./ctags -o - /tmp/bar.js 
./ctags -o - /tmp/bar.js 
email   /tmp/bar.js /^const { name, email } = user;$/;" C
name    /tmp/bar.js /^const { name, email } = user;$/;" C

рд╢рд╛рдЦрд╛ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреА рд╣реИред
рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдкрд░ рд╣рдо рджреИрдирд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

this[0] = function() {};

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, ctags рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред

{
    this[0] = function() {};
}

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓реАред рдпрд╣ рдореВрд▓ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдХреЗрдд рдлрд┐рдХреНрд╕ рд╣реЛрдЧрд╛ред

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ

рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдмрдВрдзрди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдХреЛрд╢рд┐рд╢ рдХреАред

[jet@living]/tmp% cd /tmp
cd /tmp
[jet@living]/tmp% git clone https://github.com/masatake/ctags.git
git clone https://github.com/masatake/ctags.git
Cloning into 'ctags'...
...
[jet@living]/tmp% cd ctags
cd ctags
[jet@living]/tmp/ctags% git checkout  origin/js-destructual-binding 
git checkout  origin/js-destructual-binding 
Note: switching to 'origin/js-destructual-binding'.
...
HEAD is now at 4eeac5b9 JavaScript: support more forms of destructuring assignments
[jet@living]/tmp/ctags% bash ./autogen.sh
bash ./autogen.sh
+ type autoreconf
...
optlib2c: translating optlib/inko.ctags to optlib/inko.c
+ ./misc/optlib2c optlib/inko.ctags
+ exit 0
[jet@living]/tmp/ctags% ./configure
./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
config.status: creating config.h
config.status: executing depfiles commands
[jet@living]/tmp/ctags% make -j 9
make -j 9
REPOINFO   main/repoinfo.h
make  all-recursive
make[1]: Entering directory '/tmp/ctags'
make[2]: Entering directory '/tmp/ctags'
...
  AR       libctags.a
  CCLD     ctags
  CCLD     mini-geany
make[2]: Leaving directory '/tmp/ctags'
make[1]: Leaving directory '/tmp/ctags'
[jet@living]/tmp/ctags% cat /tmp/bar.js 
cat /tmp/bar.js 
const { name, email } = user;

[jet@living]/tmp/ctags% ./ctags -o - /tmp/bar.js 
./ctags -o - /tmp/bar.js 
email /tmp/bar.js /^const { name, email } = user;$/;" C
name  /tmp/bar.js /^const { name, email } = user;$/;" C

рд╢рд╛рдЦрд╛ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреА рд╣реИред
рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдкрд░ рд╣рдо рджреИрдирд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ, рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди, рдзрдиреНрдпрд╡рд╛рджред
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдмрдирд╛рдпрд╛, рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдкреИрдЪред

рдирдорд╕реНрддреЗ

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ ctags рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ ctags рд╢реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ: https://gist.github.com/dietrichm/9e5185495dd609173182ce36ac4726df2

рдмрд╕ рдЕрдЧрд░ рдЖрдк рдЕрдХреНрд╕рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ ctags рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╢реНрдпреВ рдХреЛ рддрдм рддрдХ рдЫрд┐рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рди рд╣реЛ рдЬрд╛рдПред

рдЖрд╣рд╛рд░рдХ

рдореБрдЭреЗ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдПрд░реЗрд╕реНрдЯреНрд░рдХреНрдЪрд░рд┐рдВрдЧ рд╕реЗ рднреА рдорд┐рд▓рддреА рд╣реИ:
const [lang, setLang] = useState("en")

@ рд╕реНрдЯреНрд░реЗрдВрдЬрд╣рд┐рд▓ , рдХреНрдпрд╛ рдЖрдк # 1112 рдкрд░ рд╕рдорд╛рди рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ?

рдмреЗрд╢рдХ

рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

songouyang picture songouyang  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sparkcanon picture sparkcanon  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jespinal picture jespinal  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lvc picture lvc  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cweagans picture cweagans  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ