Ctags: JavaScript : plus de balisage asynchrone

Créé le 7 oct. 2018  ·  13Commentaires  ·  Source: universal-ctags/ctags

Le nom de l'analyseur : javascript

La ligne de commande que vous avez utilisée pour exécuter ctags :

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

Le contenu du fichier d'entrée :

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

Les balises dont vous n'êtes pas satisfait :

$ 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

La sortie des balises que vous attendez :

pas certain? mais fondamentalement ce qui précède, mais avec une balise pour la méthode de classe asynchrone

La version de 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

Comment obtenez-vous le binaire ctags : homebrew

J'ai essayé de résoudre ce problème moi-même, mais il n'y en a pas assez pour que je puisse commencer par moi-même. en passant, je suis allé à la recherche d'un chat communautaire et j'ai réalisé que vous communiquiez en utilisant des problèmes (d'où ce problème).

ce que j'ai essayé :

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

en passant, existe-t-il des articles sur le fonctionnement de ce code ? je ne suis pas un développeur ac, mais lorsque j'ai inspecté d'autres PR qui ont ajouté des balises asynchrones à l'analyseur js, je n'ai pas remarqué beaucoup de changement dans la logique en dehors de Units/ . utilise-t-il la magie noire pour dériver les définitions de balises du fichier expected.tags ? ! aider sur la façon dont je peux aider serait cool!

Parser buenhancement

Tous les 13 commentaires

La raison pour laquelle vous n'obtenez pas de balise pour attrs n'est pas async , mais que l'analyseur JS ne comprend actuellement pas la syntaxe de la méthode que vous avez utilisée. Je ne le connais pas non plus, mais je vais essayer de l'étudier pour y ajouter un support.
Vous pouvez vérifier que la suppression de async n'aide pas à marquer la méthode.

en passant, existe-t-il des articles sur le fonctionnement de ce code ? je ne suis pas un développeur ac, mais lorsque j'ai inspecté d'autres PR qui ont ajouté des balises asynchrones à l'analyseur js, je n'ai pas remarqué beaucoup de changement dans la logique en dehors de Units/ . utilise-t-il la magie noire pour dériver les définitions de balises du fichier expected.tags ? ! aider sur la façon dont je peux aider serait cool!

Malheureusement, il n'y a pas beaucoup plus de documentation que le code lui-même et, espérons-le, quelques commentaires. Mais non, ce n'est pas tellement utiliser la magie noire ; le commit qui a ajouté async "support" (41c2c77ea6da1f42fcd891948de04d7b1ad2c958) a ajouté du code à l'analyseur javaScript : il a ajouté async comme mot-clé, plus sa gestion spéciale à 4 endroits.

Pour être juste, c'est une syntaxe non standard. Les propriétés statiques/d'instance ne sont pas encore figées. Mais je suppose qu'il serait utile d'en ajouter rien de moins.

J'ai remarqué un mot-clé sap dans l'analyseur que je ne reconnais pas, qu'est-ce que c'est pour @b4n ? Je suis tellement curieux 😄

Pour être juste, c'est une syntaxe non standard. Les propriétés statiques/d'instance ne sont pas encore figées. Mais je suppose qu'il serait utile d'en ajouter rien de moins.

Où puis-je obtenir plus d'informations sur la syntaxe non standard ?

LANG=JavaScript ; Nous, développeurs de u-ctags, pas des experts de $LANG . Références linguistiques associées, informations standard/non standard, état de la normalisation, petits exemples d'entrées, sorties concrètes de balises attendues pour les entrées,
la grande base de code utilisant la fonctionnalité et l'impact des utilisateurs, etc. sont nécessaires pour travailler sur le problème.
Cette information M'anime.
(Je devrais mettre les phrases ci-dessus quelque part .github/ISSUE_TEMPLATE.md.)

J'ai remarqué un mot-clé sap dans l'analyseur que je ne reconnais pas, qu'est-ce que c'est pour @b4n ? Je suis si curieux sourire

Nous héritons du mot-clé d'Exuberant-ctags, d'où Universal-ctags a été fork.

J'ai remarqué un mot-clé sap dans l'analyseur que je ne reconnais pas, qu'est-ce que c'est pour @b4n ? Je suis tellement curieux 😄

Comme @masatake dit, il vient avant mon temps :) Mais de toute façon, il est triste de bidouille pour améliorer le soutien du SAPUI5 cadre IIUC (je viens de découvrir qu'il semble être OpenUI5 maintenant).

Je voudrais présenter le sous-analyseur OpenUI5 ou SAPUI5 sur l'analyseur JavaScript.
Tous les types définis dans l'analyseur JavaScript pour SAPUI5 doivent être déplacés vers le sous-analyseur.
@jayceekay , j'aimerais connaître l'URL ou quelque chose pour la documentation expliquant async .

Si ce n'est pas dans une norme populaire, je penserai à introduire un sous-analyseur pour cela.

async se brisera si Class a get ou set avant. vérifier l'exemple de code ci-dessous :

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

Et une chose non liée à async , xx et yy également ignorée.

Non reproduit.

[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
La version homebrew universal-ctags est obsolète et ne peut pas encore être mise à niveau.

@KazuakiM , pourriez-vous examiner le problème concernant Homebrew rapporté par @maple-leaf ?

@feuille d'érable
J'ai désinstallé universal-ctags, puis je l'ai réinstallé à nouveau maintenant.
Ou essayez brew reinstall universal-ctags .

journal des opérations)
https://gist.github.com/KazuakiM/69f58a05f07e3f6dd6ea3d76bc977bea

Pouvez-vous s'il vous plaît répéter cela?

@masatake @KazuakiM J'essaie brew reinstall universal-ctags , et ça marche. On dirait que homebrew ne peut pas mettre à niveau la version HEAD, problème : https://github.com/Homebrew/legacy-homebrew/issues/13197

@feuille d'érable
Merci, essayez-vous uninstall & install --HEAD ?

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

@KazuakiM Je viens d'essayer et ça marche aussi.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

jespinal picture jespinal  ·  8Commentaires

softinio picture softinio  ·  6Commentaires

jagjordi picture jagjordi  ·  9Commentaires

alphaCTzo7G picture alphaCTzo7G  ·  7Commentaires

sparkcanon picture sparkcanon  ·  3Commentaires