Ctags: جافا سكريبت: المزيد من وضع العلامات غير المتزامن

تم إنشاؤها على ٧ أكتوبر ٢٠١٨  ·  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 => {}
+}

جانبا ، هل هناك أي مقالات حول كيفية عمل هذا الرمز؟ أنا لست مطورًا للتيار المتردد ولكن عندما قمت بفحص العلاقات العامة الأخرى التي أضافت علامات غير متزامنة إلى محلل js ، لم ألاحظ الكثير من التغيير في المنطق خارج Units/ . هل يستخدم السحر الأسود لاشتقاق تعريفات الوسم من ملف expected.tags ؟! المساعدة في كيف يمكنني المساعدة ستكون رائعة!

Parser buenhancement

ال 13 كومينتر

سبب عدم حصولك على علامة attrs ليس async ، لكن المحلل اللغوي JS لا يفهم حاليًا بنية الطريقة التي استخدمتها. لست على دراية بها أيضًا ، لكنني سأحاول أن أدرسها لإضافة دعم لها.
يمكنك التحقق من أن إزالة async لا تساعد في تمييز الطريقة.

جانبا ، هل هناك أي مقالات حول كيفية عمل هذا الرمز؟ أنا لست مطورًا للتيار المتردد ولكن عندما قمت بفحص العلاقات العامة الأخرى التي أضافت علامات غير متزامنة إلى محلل js ، لم ألاحظ الكثير من التغيير في المنطق خارج Units/ . هل يستخدم السحر الأسود لاشتقاق تعريفات الوسم من ملف expected.tags ؟! المساعدة في كيف يمكنني المساعدة ستكون رائعة!

لسوء الحظ ، لا يوجد الكثير من التوثيق عن الكود نفسه ، ونأمل أن تكون فيه بعض التعليقات. لكن لا ، إنه لا يستخدم السحر الأسود كثيرًا ؛ الالتزام الذي أضاف async "support" (41c2c77ea6da1f42fcd891948de04d7b1ad2c958) أضاف بعض التعليمات البرمجية إلى محلل جافا سكريبت: أضاف async ككلمة رئيسية ، بالإضافة إلى التعامل معها بشكل خاص في 4 أماكن.

لكي نكون منصفين ، هذا بناء غير قياسي. لم يتم تعيين الخصائص الثابتة / المثيل في الحجر حتى الآن. لكنني أعتقد أنه سيكون من المفيد إضافة أقل من ذلك.

لاحظت وجود كلمة رئيسية sap في المحلل اللغوي لم أتعرف عليها ، فما هي قيمة @ b4n؟ أنا فضولي جدا 😄

لكي نكون منصفين ، هذا بناء غير قياسي. لم يتم تعيين الخصائص الثابتة / المثيل في الحجر حتى الآن. لكنني أعتقد أنه سيكون من المفيد إضافة أقل من ذلك.

أين يمكنني الحصول على مزيد من المعلومات حول البنية غير القياسية؟

LANG=JavaScript ؛ نحن مطورو u-ctags ، ولسنا خبراء في $LANG . مراجع اللغة ذات الصلة ، المعلومات القياسية / غير القياسية ، حالة التوحيد القياسي ، مدخلات الأمثلة الصغيرة ، مخرجات العلامات المتوقعة الملموسة للمدخلات ،
يلزم وجود قاعدة بيانات كبيرة تستخدم الميزة وتأثير المستخدمين وما إلى ذلك للعمل على هذه المشكلة.
هذه المعلومات تدفعني.
(يجب أن أضع الجمل أعلاه في مكان ما .github / ISSUE_TEMPLATE.md.)

لاحظت كلمة مفتاحية sap في المحلل اللغوي لا أتعرف عليها ، فما هي لـ @ b4n؟ أنا فضولي للغاية بابتسامة

نحن نرث الكلمة الأساسية من Exuberant-ctags ، حيث تم تقسيم Universal-ctags.

لاحظت وجود كلمة رئيسية sap في المحلل اللغوي لم أتعرف عليها ، فما هي قيمة @ b4n؟ أنا فضولي جدا 😄

كما قال masatake ، يأتي من ما قبل وقتي :) ولكن على أي حال ، إنه اختراق محزن لتحسين الدعم لإطار عمل SAPUI5 IIUC (اكتشفت أنه يبدو أنه 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 ، هل يمكنك إلقاء نظرة على مشكلة البيرة التي أبلغت عنها @ Maple-Leaf؟

@ مابل ليف
لقد قمت بإلغاء تثبيت علامات Universal-ctags ثم أعدت تثبيتها مرة أخرى الآن.
أو جرب brew reinstall universal-ctags .

سجل OPE)
https://gist.github.com/KazuakiM/69f58a05f07e3f6dd6ea3d76bc977bea

هل يمكنك قول ذلك مرة أخرى من فضلك؟

masatakeKazuakiM أحاول 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 التقييمات