Ctags: JavaScript: lebih banyak penandaan asinkron

Dibuat pada 7 Okt 2018  ·  13Komentar  ·  Sumber: universal-ctags/ctags

Nama pengurai: javascript

Baris perintah yang Anda gunakan untuk menjalankan ctags:

$ ctags --options=NONE Units/parser-javascript.r/js-async2.d/input-more-async.js

Isi file masukan:

$ cat Units/parser-javascript.r/js-async2.d/input-more-async.js
class ES6Class {
  anotherAsyncMethod = async attrs => {}
}

Keluaran tag yang tidak Anda puaskan:

$ 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

Output tag yang Anda harapkan:

tidak yakin? tetapi pada dasarnya di atas, tetapi dengan tag untuk metode kelas async

Versi ctag:

$ 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

Bagaimana Anda mendapatkan biner ctags: homebrew

saya mencoba menangani ini sendiri tetapi tidak cukup bagi saya untuk memulai sendiri. selain itu, saya mencari obrolan komunitas dan menyadari bahwa kalian berkomunikasi menggunakan masalah (maka masalah ini).

apa yang saya coba:

$ 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 => {}
+}

selain itu, apakah ada artikel tentang cara kerja kode ini? saya bukan pengembang ac tetapi ketika saya memeriksa PR lain yang menambahkan tag async ke parser js saya tidak melihat banyak perubahan pada logika di luar Units/ . apakah itu menggunakan ilmu hitam untuk mendapatkan definisi tag dari file expected.tags ?! bantuan tentang bagaimana saya dapat membantu akan keren!

Parser buenhancement

Semua 13 komentar

Alasan Anda tidak mendapatkan tag untuk attrs bukan async , tetapi parser JS saat ini tidak memahami sintaks metode yang Anda gunakan. Saya juga tidak terbiasa dengannya, tetapi saya akan mencoba dan mempelajarinya untuk menambahkan dukungan untuk itu.
Anda dapat memeriksa bahwa menghapus async tidak membantu mendapatkan metode yang ditandai.

selain itu, apakah ada artikel tentang cara kerja kode ini? saya bukan pengembang ac tetapi ketika saya memeriksa PR lain yang menambahkan tag async ke parser js saya tidak melihat banyak perubahan pada logika di luar Units/ . apakah itu menggunakan ilmu hitam untuk mendapatkan definisi tag dari file expected.tags ?! bantuan tentang bagaimana saya dapat membantu akan keren!

Sayangnya tidak banyak lagi dokumentasi dari kode itu sendiri, dan semoga sedikit komentar di dalamnya. Tapi tidak, itu tidak terlalu banyak menggunakan ilmu hitam; komit yang menambahkan async "support" (41c2c77ea6da1f42fcd891948de04d7b1ad2c958) memang menambahkan beberapa kode ke parser javaScript: menambahkan async sebagai kata kunci, ditambah penanganannya secara khusus di 4 tempat.

Agar adil, itu adalah sintaks non-standar. Properti statis/instance belum diatur. Tapi saya kira akan berguna untuk menambahkan tidak lebih dari itu.

Saya melihat kata kunci sap di parser yang tidak saya kenal, untuk apa @b4n? aku jadi penasaran

Agar adil, itu adalah sintaks non-standar. Properti statis/instance belum diatur. Tapi saya kira akan berguna untuk menambahkan tidak lebih dari itu.

Di mana saya bisa mendapatkan informasi lebih lanjut tentang sintaks non-standar?

LANG=JavaScript ; Kami, pengembang u-ctags, bukan ahli $LANG . Referensi bahasa terkait, informasi standar/non-standar, status standardisasi, input contoh kecil, output tag yang diharapkan untuk input,
basis kode besar yang menggunakan fitur, dan dampak pengguna, dll. diperlukan untuk mengatasi masalah ini.
Informasi ini mendorong AKU.
(Saya harus meletakkan kalimat di atas ke suatu tempat .github/ISSUE_TEMPLATE.md.)

Saya melihat kata kunci sap di parser yang tidak saya kenal, untuk apa @b4n? aku jadi penasaran senyum

Kami mewarisi kata kunci dari Exuberant-ctags, dari mana Universal-ctags bercabang.

Saya melihat kata kunci sap di parser yang tidak saya kenal, untuk apa @b4n? aku jadi penasaran

Seperti @masatake mengatakan, itu berasal dari sebelum waktu saya :) Tapi bagaimanapun, itu adalah hack yang menyedihkan untuk meningkatkan dukungan untuk SAPUI5 kerangka IIUC (saya baru tahu itu tampaknya OpenUI5 sekarang).

Saya ingin memperkenalkan sub parser OpenUI5 atau SAPUI5 pada parser JavaScript.
Semua jenis yang ditentukan dalam parser JavaScript untuk SAPUI5 harus dipindahkan ke subparser.
@jayceekay , saya ingin tahu URL atau sesuatu untuk dokumentasi yang menjelaskan async .

Jika tidak dalam standar yang populer, saya akan berpikir untuk memperkenalkan subparser untuk itu.

async akan pecah jika Class memiliki get atau set sebelumnya. periksa contoh kode di bawah ini:

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

Dan satu hal yang tidak berhubungan dengan async , xx dan yy juga diabaikan.

Tidak direproduksi.

[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
Versi universal-ctags Homebrew sudah usang, dan sejauh ini tidak dapat ditingkatkan.

@KazuakiM , dapatkah Anda melihat masalah tentang Homebrew yang dilaporkan oleh @maple-leaf?

@daun maple
Saya telah menghapus universal-ctags dan menginstalnya kembali sekarang.
Atau coba brew reinstall universal-ctags .

buka log)
https://Gist.github.com/KazuakiM/69f58a05f07e3f6dd6ea3d76bc977bea

Bisakah Anda mengatakan itu lagi?

@masatake @KazuakiM Saya mencoba brew reinstall universal-ctags , dan berhasil. Sepertinya homebrew tidak dapat memutakhirkan versi HEAD, terbitkan: https://github.com/Homebrew/legacy-homebrew/issues/13197

@daun maple
Terima kasih, Apakah Anda mencoba uninstall & install --HEAD ?

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

@KazuakiM Saya baru saja mencoba, dan berhasil juga.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat