Ctags: JavaScript: больше асинхронных тегов

Созданный на 7 окт. 2018  ·  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

Ожидаемый результат тегов:

не уверен? но в основном то, что указано выше, но с тегом для метода класса 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 ?! было бы здорово помочь, чем я могу помочь!

Parser buenhancement

Все 13 Комментарий

Причина, по которой вы не получаете тег для 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.

Я заметил в парсере ключевое слово sap которое я не узнаю, что это за @ b4n? Мне так любопытно 😄

Как сказал @masatake , это было до моего времени :) Но в любом случае это печальный прием для улучшения поддержки OpenUI5 ).

Я хотел бы представить суб-парсер 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% 

image
Версия 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 Я только что попробовал, тоже работает.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги