Ctags: JSON рдЖрдЙрдЯрдкреБрдЯ OSX/Debian рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдлрд╝рд░ре░ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: universal-ctags/ctags

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдореИрдВрдиреЗ OSX рдкрд░ рд╣реЛрдордмреНрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрднреА-рдЕрднреА рдпреВрдирд┐рд╡рд░реНрд╕рд▓ ctags рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рдереА
--output-format=json рд╡рд┐рдХрд▓реНрдк, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЛ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдбреЗрдмрд┐рдпрди рдкрд░ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

ctags: unknown output format name supplied for "output-format=json"

рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп

ctags --output-format=json myfile.c

рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ JSON рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк рдЕрдм рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ?

рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЛ рджреЛрд╕реНрддреЛрдВ!

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ libjansson.so, --output-format=json рд▓рд┐рдП рдмреИрдХрдПрдВрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЖрдкрдХреЗ рдкреАрд╕реА рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдереА рдпрд╛ рдЖрдкрдХреЗ ctags рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реЗ рдареАрдХ рд╕реЗ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдереАред

рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

[yamato@slave]$ u-ctags --help | grep -e --output-format
  --output-format=u-ctags|e-ctags|etags|xref|json

"json" рд╕рд╣рд╛рдпрддрд╛ рд╕рдВрджреЗрд╢ -of --output-format ред

[yamato@slave]$ u-ctags --list-features                 
#NAME             DESCRIPTION
aspell            linked with code for spell checking (internal use)
debug             TO BE WRITTEN
iconv             can convert input/output encodings
interactive       accepts source code from stdin
json              supports json format output
option-directory  TO BE WRITTEN
regex             can use regular expression based pattern matching
sandbox           linked with code for system call level sandbox
wildcards         can use glob matching
xpath             linked with library for parsing xml input
yaml              linked with library for parsing yaml input

"json" --list-features рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред

рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ libjansson.so рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдкрдХреЛ "./configure ..." рд╕реЗ рдмрд┐рд▓реНрдб-рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдмрд┐рд▓реНрдб-рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдЯреВрд▓ libjansson.so рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдареАрдХ рд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВрдЧреЗ:

[yamato@slave]~/var/ctags-github% ./configure
...
checking for JANSSON... yes
...

рдореИрдВ рдбреЗрдмрд┐рдпрди рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ (рдореИрдВ рд░реЛрдЬрд╛рдирд╛ рдлреЗрдбреЛрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ), рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ libjansson рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ libjansson-devel рдпрд╛ libjansson-dev рдкреИрдХреЗрдЬ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ u-ctags рдбреЗрдмрд┐рдпрди рдкреИрдХреЗрдЬ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред
https://github.com/universal-ctags/ctags/issues/1785
рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛ --output-format=json рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рдореИрдВ рдЗрд╕реЗ @hnakamur рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ libjansson.so, --output-format=json рд▓рд┐рдП рдмреИрдХрдПрдВрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЖрдкрдХреЗ рдкреАрд╕реА рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдереА рдпрд╛ рдЖрдкрдХреЗ ctags рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реЗ рдареАрдХ рд╕реЗ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдереАред

рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

[yamato@slave]$ u-ctags --help | grep -e --output-format
  --output-format=u-ctags|e-ctags|etags|xref|json

"json" рд╕рд╣рд╛рдпрддрд╛ рд╕рдВрджреЗрд╢ -of --output-format ред

[yamato@slave]$ u-ctags --list-features                 
#NAME             DESCRIPTION
aspell            linked with code for spell checking (internal use)
debug             TO BE WRITTEN
iconv             can convert input/output encodings
interactive       accepts source code from stdin
json              supports json format output
option-directory  TO BE WRITTEN
regex             can use regular expression based pattern matching
sandbox           linked with code for system call level sandbox
wildcards         can use glob matching
xpath             linked with library for parsing xml input
yaml              linked with library for parsing yaml input

"json" --list-features рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред

рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ libjansson.so рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдкрдХреЛ "./configure ..." рд╕реЗ рдмрд┐рд▓реНрдб-рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдмрд┐рд▓реНрдб-рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдЯреВрд▓ libjansson.so рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдареАрдХ рд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВрдЧреЗ:

[yamato@slave]~/var/ctags-github% ./configure
...
checking for JANSSON... yes
...

рдореИрдВ рдбреЗрдмрд┐рдпрди рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ (рдореИрдВ рд░реЛрдЬрд╛рдирд╛ рдлреЗрдбреЛрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ), рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ libjansson рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ libjansson-devel рдпрд╛ libjansson-dev рдкреИрдХреЗрдЬ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ u-ctags рдбреЗрдмрд┐рдпрди рдкреИрдХреЗрдЬ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред
https://github.com/universal-ctags/ctags/issues/1785
рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛ --output-format=json рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рдореИрдВ рдЗрд╕реЗ @hnakamur рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

@masatake рдЖрдкрдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

libjansson рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд╛рдпрдм рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдпрд╣реА рдХрд┐рдпрд╛ рд╣реИ:

рдбреЗрдмрд┐рдпрди рдкрд░ , рдореИрдВрдиреЗ libjansson-dev рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдлрд┐рд░ automake рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛:

[user<strong i="11">@vps</strong>:~/ctags]┬а~$ sudo apt-get install libjansson-dev && ./autogen.sh && ./configure && make && sudo make install

рдФрд░ рдпрд╣ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред

OSX рдкрд░ , рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ --with-jansson рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛:

[user<strong i="18">@macosx</strong>:~/ctags]┬а~$  brew install jansson
[user<strong i="19">@macosx</strong>:~/ctags]┬а~$  brew install --with-jansson --HEAD universal-ctags/universal-ctags/universal-ctags

рдЕрдм рджреЛрдиреЛрдВ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ:

[user<strong i="23">@vps</strong>:~/ctags]┬а~$ ./ctags --list-features

#NAME                       DESCRIPTION
[...]
json                        supports json format output
[...]

рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрдд!

@fabiensabatie FYI рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдбреЗрдмрд┐рдпрди рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ

рдпрд╣рд╛рдВ рдирд╡реАрдирддрдо Build-Depends
https://salsa.debian.org/debian/universal-ctags/blob/cedf9a1c5106d371398b35031409ae09caecf3e6/debian/control#L5 -13

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдмрд┐рдпрди рдХреА рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдореЗрдВ рдпреВрдирд┐рд╡рд░реНрд╕рд▓-рд╕реАрдЯреАрдПрдЬреА рдХреЗ рдкрд╛рд╕ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЬреЛрдВрд╕ рдХрд╛ рд╕рдорд░реНрдерди рд╣реЛрдЧрд╛ред

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

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

fommil picture fommil  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

trevordmiller picture trevordmiller  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

softinio picture softinio  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ