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は何ですか? 私はとても好奇心が強い笑顔です

キーワードは、Universal-ctagsがフォークされたExuberant-ctagsから継承されます。

パーサーにsapキーワードがあり、認識できないことに気づきました。@ b4nはどうなっていますか? 私はとても興味があります😄

@masatakeが言ったように、それは私の時間の前から来ています:)しかし、とにかく、それはSAPUI5フレームワークIIUCのサポートを改善するための悲しいハックです(私はちょうど今OpenUI5のようだとわかりました)。

JavaScriptパーサーにOpenUI5またはSAPUI5サブパーサーを紹介したいと思います。
SAPUI5のJavaScriptパーサーで定義されているすべての種類は、サブパーサーに移動する必要があります。
@jayceekayasync説明するドキュメントのURLなどを知りたいのですが。

それが一般的な標準にない場合は、サブパーサーを導入することを検討します。

async Classgetまたは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
    }
};

また、 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
自作のユニバーサルctagsバージョンは古く、今のところアップグレードできません。

@ KazuakiM 、@ maple-leafによって報告されたHomebrewに関する問題を見て

@ maple-leaf
ユニバーサルctagsをアンインストールしてから、再インストールしました。
または、 brew reinstall universal-ctags試してください。

opeログ)
https://gist.github.com/KazuakiM/69f58a05f07e3f6dd6ea3d76bc977bea

もう一度言っていただけますか?

@masatake @KazuakiM brew reinstall universal-ctagsを試してみましたが、うまくいきました。 homebrewはHEADバージョンをアップグレードできないようです、問題: https

@ maple-leaf
ありがとう、 uninstall & install --HEADを試してみますか?

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

@KazuakiM試したばかりで、動作します。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

lvc picture lvc  ·  8コメント

fommil picture fommil  ·  19コメント

cweagans picture cweagans  ·  13コメント

lvc picture lvc  ·  3コメント

EvanCarroll picture EvanCarroll  ·  14コメント