Имя парсера: 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
Ожидаемый результат тегов:
не уверен? но в основном то, что указано выше, но с тегом для метода класса async
Версия 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 => {}
+}
в стороне, есть ли какие-нибудь статьи о том, как работает этот код? Я не разработчик переменного тока, но когда я проверил другие PR, которые добавляли асинхронные теги в парсер js, я не заметил больших изменений в логике за пределами Units/
. используется ли черная магия для получения определений тегов из файла expected.tags
?! было бы здорово помочь, чем я могу помочь!
Причина, по которой вы не получаете тег для attrs
, не в том, что async
, а в том, что парсер JS в настоящее время не понимает синтаксис метода, который вы использовали. Я тоже не знаком с ним, но я попробую изучить его, чтобы добавить поддержку.
Вы можете проверить, что удаление async
не помогает пометить метод.
в стороне, есть ли какие-нибудь статьи о том, как работает этот код? Я не разработчик переменного тока, но когда я проверил другие PR, которые добавляли асинхронные теги в парсер js, я не заметил больших изменений в логике за пределами
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.
Я хотел бы представить суб-парсер OpenUI5 или SAPUI5 на парсере JavaScript.
Все виды, определенные в синтаксическом анализаторе JavaScript для SAPUI5, следует переместить в подпарсер.
@jayceekay , я хотел бы узнать URL-адрес или что-то еще для документации, объясняющей async
.
Если он не входит в популярный стандарт, я подумаю о введении для него субпарсера.
async
сломается, если перед Class
стоит get
или set
. проверьте пример кода ниже:
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 , не могли бы вы взглянуть на проблему Homebrew, о которой сообщил @ maple-leaf?
@кленовый лист
Я удалил 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 Я только что попробовал, тоже работает.