Ctags: OSX/Debian์—์„œ JSON ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

์— ๋งŒ๋“  2019๋…„ 02์›” 20์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: universal-ctags/ctags

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

๋ฐฉ๊ธˆ OSX์—์„œ homebrew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Universal ctags๋ฅผ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—
--output-format=json ์˜ต์…˜์ด๋ฏ€๋กœ ํ˜„์žฌ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณต์ œํ•œ ํ›„ ๋ฐ๋น„์•ˆ ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

๋ช…๋ น์„ ์‚ฌ์šฉํ•  ๋•Œ

ctags --output-format=json myfile.c

๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ JSON ์ถœ๋ ฅ ํ˜•์‹์ด ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ž˜ ์ง€๋‚ด์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„!

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

--output-format=json ๋Œ€ํ•œ ๋ฐฑ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ libjansson.so ๊ฐ€ PC์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ctags ์‹คํ–‰ ํŒŒ์ผ์— ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์˜ต์…˜์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

--output-format ๋„์›€๋ง ๋ฉ”์‹œ์ง€์— "json"์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ €๋Š” Debian์„ ์ž˜ ๋ชจ๋ฅด์ง€๋งŒ(์ €๋Š” ๋งค์ผ Fedora๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค), libjansson์„ ํŒจํ‚ค์ง€๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
libjansson-devel ๋˜๋Š” libjansson-dev ํŒจํ‚ค์ง€๋„ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

u-ctags ๋ฐ๋น„์•ˆ ํŒจํ‚ค์ง€๋„ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/universal-ctags/ctags/issues/1785
๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€์— ์žˆ๋Š” ์‹คํ–‰ ํŒŒ์ผ์˜ --output-format=json ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.
@hnakamur๋กœ ํ•ด๊ฒฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

--output-format=json ๋Œ€ํ•œ ๋ฐฑ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ libjansson.so ๊ฐ€ PC์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ctags ์‹คํ–‰ ํŒŒ์ผ์— ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์˜ต์…˜์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

--output-format ๋„์›€๋ง ๋ฉ”์‹œ์ง€์— "json"์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ €๋Š” Debian์„ ์ž˜ ๋ชจ๋ฅด์ง€๋งŒ(์ €๋Š” ๋งค์ผ Fedora๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค), libjansson์„ ํŒจํ‚ค์ง€๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
libjansson-devel ๋˜๋Š” libjansson-dev ํŒจํ‚ค์ง€๋„ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

u-ctags ๋ฐ๋น„์•ˆ ํŒจํ‚ค์ง€๋„ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/universal-ctags/ctags/issues/1785
๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€์— ์žˆ๋Š” ์‹คํ–‰ ํŒŒ์ผ์˜ --output-format=json ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.
@hnakamur๋กœ ํ•ด๊ฒฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@masatake ์ง€์›ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

libjansson์ด ์‹ค์ œ๋กœ ๋ˆ„๋ฝ๋˜์—ˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ ํ•œ ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Debian ์—์„œ 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 ์ฐธ๊ณ ๋กœ, ๋‹ค์Œ ๋ณ‘ํ•ฉ ์š”์ฒญ์„ Debian์— ๋ณด๋ƒˆ๊ณ  ์ผ๋ถ€ ์กฐ์ •์œผ๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  Build-Depends
https://salsa.debian.org/debian/universal-ctags/blob/cedf9a1c5106d371398b35031409ae09caecf3e6/debian/control#L5 -13

๋”ฐ๋ผ์„œ ๋‹ค์Œ Debian ๋ฆด๋ฆฌ์Šค์˜ universal-ctags๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ json ์ง€์›์„ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰