Der Name des Parsers: javascript
Die Befehlszeile, die Sie zum Ausführen von ctags verwendet haben:
$ ctags --options=NONE Units/parser-javascript.r/js-async2.d/input-more-async.js
Der Inhalt der Eingabedatei:
$ cat Units/parser-javascript.r/js-async2.d/input-more-async.js
class ES6Class {
anotherAsyncMethod = async attrs => {}
}
Die Tag-Ausgabe, mit der Sie nicht zufrieden sind:
$ 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
Die erwartete Ausgabe der Tags:
nicht sicher? aber im Grunde das obige, aber mit einem Tag für die async-Klassenmethode
Die Ctags-Version:
$ 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
Wie bekomme ich Ctags binär: homebrew
Ich habe versucht, das selbst anzugehen, aber es reicht nicht für mich, alleine anzufangen. Nebenbei habe ich nach einem Community-Chat gesucht und festgestellt, dass ihr über Probleme kommuniziert (daher dieses Problem).
was ich probiert habe:
$ 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 => {}
+}
Gibt es nebenbei noch Artikel darüber, wie dieser Code funktioniert? Ich bin kein AC-Entwickler, aber als ich andere PRs untersucht habe, die dem js-Parser asynchrone Tags hinzugefügt haben, habe ich außerhalb von Units/
keine großen Änderungen an der Logik bemerkt. verwendet es schwarze Magie, um Tag-Definitionen aus der expected.tags
Datei abzuleiten?! Hilfe wie ich helfen kann wäre cool!
Der Grund, warum Sie kein Tag für attrs
ist nicht async
, sondern dass der JS-Parser derzeit die von Ihnen verwendete Methodensyntax nicht versteht. Ich bin damit auch nicht vertraut, aber ich werde versuchen, es zu studieren, um es zu unterstützen.
Sie können überprüfen, ob das Entfernen von async
nicht hilft, die Methode mit einem Tag zu versehen.
Gibt es nebenbei noch Artikel darüber, wie dieser Code funktioniert? Ich bin kein AC-Entwickler, aber als ich andere PRs untersucht habe, die dem js-Parser asynchrone Tags hinzugefügt haben, habe ich außerhalb von
Units/
keine großen Änderungen an der Logik bemerkt. verwendet es schwarze Magie, um Tag-Definitionen aus derexpected.tags
Datei abzuleiten?! Hilfe wie ich helfen kann wäre cool!
Leider gibt es nicht viel mehr Dokumentation als den Code selbst und hoffentlich ein paar Kommentare darin. Aber nein, es wird nicht so viel schwarze Magie verwendet; der Commit, der async
"support" (41c2c77ea6da1f42fcd891948de04d7b1ad2c958) hinzufügte, fügte dem JavaScript-Parser etwas Code hinzu: Er fügte async
als Schlüsselwort hinzu und behandelte es speziell an 4 Stellen.
Um fair zu sein, das ist eine Nicht-Standard-Syntax. Die statischen/Instanzeigenschaften sind noch nicht in Stein gemeißelt. Aber ich denke, es wäre nützlich, nicht weniger hinzuzufügen.
Ich habe ein sap
Schlüsselwort im Parser bemerkt, das ich nicht kenne. Was ist das für @b4n? Ich bin so neugierig 😄
Um fair zu sein, das ist eine Nicht-Standard-Syntax. Die statischen/Instanzeigenschaften sind noch nicht in Stein gemeißelt. Aber ich denke, es wäre nützlich, nicht weniger hinzuzufügen.
Wo erhalte ich weitere Informationen zur Nicht-Standard-Syntax?
LANG=JavaScript
; Wir, u-ctags-Entwickler, keine Experten von $LANG
. Zugehörige Sprachreferenzen, Standard-/Nicht-Standard-Informationen, Stand der Standardisierung, kleine Beispieleingaben, konkrete erwartete Tag-Ausgabe für die Eingaben,
die große Codebasis, die die Funktion verwendet, und die Auswirkungen der Benutzer usw. werden benötigt, um an dem Problem zu arbeiten.
Diese Information treibt mich an.
(Ich sollte die obigen Sätze irgendwo in .github/ISSUE_TEMPLATE.md einfügen.)
Ich habe im Parser ein sap-Schlüsselwort bemerkt, das ich nicht kenne. Was ist das für @b4n? Ich bin so neugierig lächeln
Wir erben das Schlüsselwort von Exuberant-ctags, von wo Universal-ctags abgezweigt wurde.
Ich habe ein
sap
Schlüsselwort im Parser bemerkt, das ich nicht kenne. Was ist das für @b4n? Ich bin so neugierig 😄
Wie @masatake sagte, es stammt aus meiner Zeit :) Aber wie auch immer, es ist ein trauriger Hack zur Verbesserung der Unterstützung für das SAPUI5- Framework IIUC (ich habe gerade herausgefunden, dass es jetzt OpenUI5 zu sein scheint).
Ich möchte den OpenUI5- oder SAPUI5-Sub-Parser auf dem JavaScript-Parser vorstellen.
Alle im JavaScript-Parser für SAPUI5 definierten Arten sollten in den Subparser verschoben werden.
@jayceekay , ich würde gerne die URL oder etwas für die Dokumentation wissen, die async
.
Wenn es nicht in einem gängigen Standard enthalten ist, werde ich darüber nachdenken, einen Subparser dafür einzuführen.
async
wird abgebrochen, wenn Class
get
oder set
davor hat. Überprüfen Sie den folgenden Beispielcode:
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
}
};
Und eine Sache, die nicht mit async
zu tun hat, xx
und yy
ebenfalls ignoriert.
Nicht reproduziert.
[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%
Die Homebrew-Universal-Ctags-Version ist veraltet und kann bisher nicht aktualisiert werden.
@KazuakiM , könnten Sie sich das von @maple-leaf gemeldete Problem zu Homebrew ansehen?
@Ahornblatt
Ich habe universal-ctags deinstalliert und jetzt wieder neu installiert.
Oder versuchen Sie es mit brew reinstall universal-ctags
.
offenes Protokoll)
https://gist.github.com/KazuakiM/69f58a05f07e3f6dd6ea3d76bc977bea
Können Sie das bitte noch einmal sagen?
@masatake @KazuakiM Ich versuche brew reinstall universal-ctags
und es funktioniert. Anscheinend kann Homebrew die HEAD-Version nicht aktualisieren, Problem: https://github.com/Homebrew/legacy-homebrew/issues/13197
@Ahornblatt
Danke, versuchen Sie es mit uninstall & install --HEAD
?
$ brew uninstall universal-ctags
$ brew install --HEAD universal-ctags
@KazuakiM Ich habe es gerade versucht und funktioniert auch.