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) 的提交确实向 javaScript 解析器添加了一些代码:它添加了async作为关键字,并在 4 个地方专门处理了它。

公平地说,这是非标准语法。 静态/实例属性还不是一成不变的。 但我想不加也不少会很有用。

我注意到解析器中有一个我不认识的sap关键字,@b4n 是什么? 我很好奇😄

公平地说,这是非标准语法。 静态/实例属性还不是一成不变的。 但我想不加也不少会很有用。

在哪里可以获得有关非标准语法的更多信息?

LANG=JavaScript ; 我们,u-ctags 开发人员,不是$LANG专家。 相关语言参考、标准/非标准信息、标准化状态、小示例输入、输入的具体预期标签输出、
需要使用该功能的大型代码库以及用户的影响等来解决该问题。
这些信息驱动着我。
(我应该把上面的句子放在 .github/ISSUE_TEMPLATE.md 的某个地方。)

我注意到解析器中有一个我不认识的 sap 关键字,@b4n 是什么? 我很好奇的微笑

我们从 Exuberant-ctags 继承了关键字,Universal-ctags 就是从那里分叉出来的。

我注意到解析器中有一个我不认识的sap关键字,@b4n 是什么? 我很好奇😄

正如@masatake所说,它出现在我的时代之前:) 但是无论如何,对于改进对SAPUI5框架 IIUC 的支持,这是一个可悲的 hack(我刚刚发现它现在似乎是OpenUI5 )。

我想在 JavaScript 解析器上介绍 OpenUI5 或 SAPUI5 子解析器。
SAPUI5 的 JavaScript 解析器中定义的所有种类都应移至子解析器。
@jayceekay ,我想知道解释async的文档的 URL 或其他内容。

如果它不是流行的标准,我会考虑为它引入子解析器。

如果Classgetset ,则async会中断。 检查下面的示例代码:

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
    }
};

asyncxxyy无关的一件事也被忽略了。

没有转载。

[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 ,它有效。 似乎自制软件无法升级 HEAD 版本,问题: https :

@枫叶
谢谢,你试试uninstall & install --HEAD吗?

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

@KazuakiM我刚试过,也

此页面是否有帮助?
0 / 5 - 0 等级