Ctags: JavaScript: ๋” ๋งŽ์€ ๋น„๋™๊ธฐ ํƒœ๊น…

์— ๋งŒ๋“  2018๋…„ 10์›” 07์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: universal-ctags/ctags

ํŒŒ์„œ์˜ ์ด๋ฆ„: javascript

ctags๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ ๋ช…๋ น์ค„:

$ ctags --options=NONE Units/parser-javascript.r/js-async2.d/input-more-async.js

์ž…๋ ฅ ํŒŒ์ผ์˜ ๋‚ด์šฉ:

$ cat Units/parser-javascript.r/js-async2.d/input-more-async.js
class ES6Class {
  anotherAsyncMethod = async attrs => {}
}

๊ท€ํ•˜๊ฐ€ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ํƒœ๊ทธ ์ถœ๋ ฅ:

$ cat tags
!_TAG_FILE_FORMAT       2       /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED       1       /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_OUTPUT_MODE       u-ctags /u-ctags or e-ctags/
!_TAG_PROGRAM_AUTHOR    Universal Ctags Team    //
!_TAG_PROGRAM_NAME      Universal Ctags /Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL       https://ctags.io/       /official site/
!_TAG_PROGRAM_VERSION   0.0.0   /00be957/
ES6Class        Units/parser-javascript.r/js-async2.d/input-more-async.js       /^class ES6Clas
s {$/;" c

์˜ˆ์ƒํ•˜๋Š” ํƒœ๊ทธ ์ถœ๋ ฅ:

ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค? ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์ด์ง€๋งŒ ๋น„๋™๊ธฐ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ํƒœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ctags ๋ฒ„์ „:

$ ctags --version
Universal Ctags 0.0.0(00be957), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Jul  8 2018, 17:27:03
  URL: https://ctags.io/
  Optional compiled features: +wildcards, +regex, +iconv, +option-directory, +xpath, +case-inse
nsitive-filenames

ctags ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•: homebrew

์ด ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ํ˜ผ์ž ์‹œ์ž‘ํ•˜๊ธฐ์—๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ์ณ๋‘๊ณ , ๋‚˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฑ„ํŒ…์„ ์ฐพ๊ณ  ๋‹น์‹ ์ด ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์‚ฌ ์†Œํ†ตํ•˜๊ณ  ์žˆ์Œ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ์ด ๋ฌธ์ œ).

๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ๊ฒƒ :

$ git diff --cached
diff --git a/Units/parser-javascript.r/js-async2.d/expected.tags b/Units/parser-javascript.r/js
-async2.d/expected.tags
index 18b00b08..8f058db6 100644
--- a/Units/parser-javascript.r/js-async2.d/expected.tags
+++ b/Units/parser-javascript.r/js-async2.d/expected.tags
@@ -7,3 +7,4 @@ method1 input.js        /^  method1 : function() {$/;"  m       class:Class
 method2        input.js        /^  method2 : async function() {$/;"    m       class:Class
 method3        input.js        /^  method3() {$/;"     m       class:Class
 method4        input.js        /^  async method4() {$/;"       m       class:Class
+anotherAsyncMethod     input.js        /^anotherAsyncMethod = async attrs => {}$/;"    m
       class:ES6Class
diff --git a/Units/parser-javascript.r/js-async2.d/input-more-async.js b/Units/parser-javascrip
t.r/js-async2.d/input-more-async.js
new file mode 100644
index 00000000..42fcfd36
--- /dev/null
+++ b/Units/parser-javascript.r/js-async2.d/input-more-async.js
@@ -0,0 +1,3 @@
+class ES6Class {
+  anotherAsyncMethod = async attrs => {}
+}

์ œ์ณ๋‘๊ณ , ์ด ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ac ๊ฐœ๋ฐœ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ js ํŒŒ์„œ์— ๋น„๋™๊ธฐ ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค๋ฅธ PR์„ ์กฐ์‚ฌํ–ˆ์„ ๋•Œ Units/ ์™ธ๋ถ€์˜ ๋กœ์ง์— ๋Œ€ํ•œ ๋งŽ์€ ๋ณ€ํ™”๋ฅผ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. expected.tags ํŒŒ์ผ์—์„œ ํƒœ๊ทธ ์ •์˜๋ฅผ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ‘๋งˆ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋„์šธ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋„์›€์ด ๋ฉ‹์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

Parser buenhancement

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

attrs ๋Œ€ํ•œ ํƒœ๊ทธ๋ฅผ ์–ป์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๋Š” async ๊ฐ€ ์•„๋‹ˆ๋ผ JS ํŒŒ์„œ๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ๊ตฌ๋ฌธ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ €๋„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ, ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
async ๋ฅผ ์ œ๊ฑฐํ•ด๋„ ๋ฉ”์„œ๋“œ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์ณ๋‘๊ณ , ์ด ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ac ๊ฐœ๋ฐœ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ js ํŒŒ์„œ์— ๋น„๋™๊ธฐ ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค๋ฅธ PR์„ ์กฐ์‚ฌํ–ˆ์„ ๋•Œ Units/ ์™ธ๋ถ€์˜ ๋กœ์ง์— ๋Œ€ํ•œ ๋งŽ์€ ๋ณ€ํ™”๋ฅผ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. expected.tags ํŒŒ์ผ์—์„œ ํƒœ๊ทธ ์ •์˜๋ฅผ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ‘๋งˆ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋„์šธ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋„์›€์ด ๋ฉ‹์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋ถˆํ–‰ํžˆ๋„ ์ฝ”๋“œ ์ž์ฒด์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ๋งŽ์ง€ ์•Š์œผ๋ฉฐ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์„์ด ํฌํ•จ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋‹ˆ์š”, ํ‘๋งˆ๋ฒ•์„ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. async "support"(41c2c77ea6da1f42fcd891948de04d7b1ad2c958)๋ฅผ ์ถ”๊ฐ€ํ•œ ์ปค๋ฐ‹์€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์„œ์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. async ๋ฅผ ํ‚ค์›Œ๋“œ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ํŠน๋ณ„ํžˆ 4๊ณณ์—์„œ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณต์ •ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋น„ํ‘œ์ค€ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ •์ /์ธ์Šคํ„ด์Šค ์†์„ฑ์€ ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๋” ์ ๊ฒŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” sap ํ‚ค์›Œ๋“œ๋ฅผ ํŒŒ์„œ์—์„œ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. @b4n์— ๋Œ€ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋„ˆ๋ฌด ๊ถ๊ธˆํ•˜๋‹ค ๐Ÿ˜„

๊ณต์ •ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋น„ํ‘œ์ค€ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ •์ /์ธ์Šคํ„ด์Šค ์†์„ฑ์€ ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๋” ์ ๊ฒŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋น„ํ‘œ์ค€ ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” ์–ด๋””์—์„œ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

LANG=JavaScript ; ์šฐ๋ฆฌ๋Š” $LANG ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹Œ u-ctags ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๊ด€๋ จ ์–ธ์–ด ์ฐธ์กฐ, ํ‘œ์ค€/๋น„ํ‘œ์ค€ ์ •๋ณด, ํ‘œ์ค€ํ™” ํ˜„ํ™ฉ, ์ž‘์€ ์˜ˆ์‹œ ์ž…๋ ฅ, ์ž…๋ ฅ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ƒ ํƒœ๊ทธ ์ถœ๋ ฅ,
์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ์‚ฌ์šฉ์ž์˜ ์˜ํ–ฅ ๋“ฑ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด ์ •๋ณด๋Š” ME๋ฅผ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค.
(์œ„ ๋ฌธ์žฅ์„ .github/ISSUE_TEMPLATE.md ์–ด๋”˜๊ฐ€์— ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

๋‚ด๊ฐ€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” sap ํ‚ค์›Œ๋“œ๋ฅผ ํŒŒ์„œ์—์„œ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. @b4n์— ๋Œ€ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚œ ๋„ˆ๋ฌด ๊ถ๊ธˆํ•ด ๋ฏธ์†Œ

Universal-ctags๊ฐ€ ๋ถ„๊ธฐ๋œ Exuberant-ctags์—์„œ ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” sap ํ‚ค์›Œ๋“œ๋ฅผ ํŒŒ์„œ์—์„œ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. @b4n์— ๋Œ€ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋„ˆ๋ฌด ๊ถ๊ธˆํ•˜๋‹ค ๐Ÿ˜„

@masatake๊ฐ€ ๋งํ–ˆ๋“ฏ์ด, ๊ทธ๊ฒƒ์€ ๋‚ด ์‹œ๋Œ€๋ณด๋‹ค ์•ž์„  ๊ฒƒ์ž…๋‹ˆ๋‹ค :) ํ•˜์ง€๋งŒ ์–ด์จŒ๋“  SAPUI5 ํ”„๋ ˆ์ž„์›Œํฌ IIUC์— ๋Œ€ํ•œ ์ง€์›์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์Šฌํ”ˆ ํ•ดํ‚น์ž…๋‹ˆ๋‹ค(์ง€๊ธˆ์€ OpenUI5์ธ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค).

JavaScript ํŒŒ์„œ์— OpenUI5 ๋˜๋Š” SAPUI5 ํ•˜์œ„ ํŒŒ์„œ๋ฅผ ๋„์ž…ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
SAPUI5์šฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์„œ์— ์ •์˜๋œ ๋ชจ๋“  ์ข…๋ฅ˜๋Š” ์„œ๋ธŒํŒŒ์„œ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค.
@jayceekay , async ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ์˜ URL ๋˜๋Š” ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋Œ€์ค‘์ ์ธ ํ‘œ์ค€์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์„œ๋ธŒํŒŒ์„œ๋ฅผ ๋„์ž…ํ•˜๋Š” ๋ฐฉ์•ˆ์„ ์ƒ๊ฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

async set ์•ž์— get ๋˜๋Š” set ์žˆ์œผ๋ฉด Class ๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

class Test {
    async before() { // ctags will recognize this
    }

    get xx() {
        return 1;
    }

    async after() { // ctags will NOT recognize this
    }

    set yy(val) {
        return 2;
    }

    async after2() { // ctags will NOT recognize this
    }
};

๊ทธ๋ฆฌ๊ณ  async , xx , yy ๋ฌด๊ด€ํ•œ ๊ฒƒ๋„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์žฌ์ƒ์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

[jet@living]/tmp% u-ctags --version
u-ctags --version
Universal Ctags 0.0.0(0730e66d), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Jul 25 2019, 03:06:32
  URL: https://ctags.io/
  Optional compiled features: +wildcards, +regex, +iconv, +debug, +option-directory, +xpath, +json, +interactive, +sandbox, +yaml, +aspell, +packcc
[jet@living]/tmp% cat /tmp/foo.js 
cat /tmp/foo.js 
class Test {
    async before() { // ctags will recognize this
    }

    get xx() {
        return 1;
    }

    async after() { // ctags will NOT recognize this
    }

    set yy(val) {
        return 2;
    }

    async after2() { // ctags will NOT recognize this
    }
};
[jet@living]/tmp% u-ctags -o - /tmp/foo.js 
u-ctags -o - /tmp/foo.js 
Test    /tmp/foo.js /^class Test {$/;"  c
after   /tmp/foo.js /^    async after() { \/\/ ctags will NOT recognize this$/;"    m   class:Test
after2  /tmp/foo.js /^    async after2() { \/\/ ctags will NOT recognize this$/;"   m   class:Test
before  /tmp/foo.js /^    async before() { \/\/ ctags will recognize this$/;"   m   class:Test
xx  /tmp/foo.js /^    get xx() {$/;"    G   class:Test
yy  /tmp/foo.js /^    set yy(val) {$/;" S   class:Test
[jet@living]/tmp% u-ctags --options=NONE  -o - /tmp/foo.js 
u-ctags --options=NONE  -o - /tmp/foo.js 
u-ctags: Notice: No options will be read from files or environment
Test    /tmp/foo.js /^class Test {$/;"  c
after   /tmp/foo.js /^    async after() { \/\/ ctags will NOT recognize this$/;"    m   class:Test
after2  /tmp/foo.js /^    async after2() { \/\/ ctags will NOT recognize this$/;"   m   class:Test
before  /tmp/foo.js /^    async before() { \/\/ ctags will recognize this$/;"   m   class:Test
xx  /tmp/foo.js /^    get xx() {$/;"    G   class:Test
yy  /tmp/foo.js /^    set yy(val) {$/;" S   class:Test
[jet@living]/tmp% 

image
Homebrew universal-ctags ๋ฒ„์ „์ด ์˜ค๋ž˜๋˜์–ด ์ง€๊ธˆ๊นŒ์ง€ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@KazuakiM , @maple-leaf๊ฐ€ ๋ณด๊ณ ํ•œ Homebrew์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@๋‹จํ’์žŽ
Universal-ctags๋ฅผ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ์ง€๊ธˆ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋˜๋Š” brew reinstall universal-ctags ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

์šด์˜ ๋กœ๊ทธ)
https://gist.github.com/KazuakiM/69f58a05f07e3f6dd6ea3d76bc977bea

๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@masatake @KazuakiM brew reinstall universal-ctags ์‹œ๋„ ํ–ˆ๋Š”๋ฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. homebrew๊ฐ€ HEAD ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ: https://github.com/Homebrew/legacy-homebrew/issues/13197

@๋‹จํ’์žŽ
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. uninstall & install --HEAD ๋ฅผ ์‚ฌ์šฉํ•ด

$ brew uninstall universal-ctags
$ brew install --HEAD universal-ctags

@KazuakiM ๋ฐฉ๊ธˆ ์‹œ๋„ํ–ˆ๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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