解析器名称: 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
文件中导出标签定义?! 帮助我如何提供帮助会很酷!
您没有获得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 就是从那里分叉出来的。
我想在 JavaScript 解析器上介绍 OpenUI5 或 SAPUI5 子解析器。
SAPUI5 的 JavaScript 解析器中定义的所有种类都应移至子解析器。
@jayceekay ,我想知道解释async
的文档的 URL 或其他内容。
如果它不是流行的标准,我会考虑为它引入子解析器。
如果Class
有get
或set
,则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
}
};
与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%
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我刚试过,也