es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo analizar y extraer métodos de clase de javascript?

¿Cómo puedo analizar una clase de JavaScript para obtener una lista de todos sus métodos?

Hasta ahora he intentado los siguientes analizadores:

  • acorn@8.5.0, esprima@4.0.1 en Node.js
  • esprima==4.0.1 en Python.

Aquí están todos mis intentos:

Node.js

import * as esprima from “esprima”;
import * as acorn from “acorn”;

const snippets = [
“class Foo {}”, // 0
“class Foo { constructor() {} }”, // 1
“class Foo { constructor() {}; bar() {} }”, // 2
“class Foo { constructor() {}; bar() {}; baz = () => {}; }”, // 3
“let baz = () => {}”, // 4
]

console.log(“——–esprima——–“);
for(let [i,snippet] of Object.entries(snippets)) {
try {
esprima.parseScript(snippet);
console.log(snippet ${i}: ok);
} catch(e) {
console.log(snippet ${i}: failed);
}
}
console.log(“——–acorn——–“);
for(let [i,snippet] of Object.entries(snippets)) {
try {
acorn.parse(snippet);
console.log(snippet ${i}: ok);
} catch(e) {
console.log(snippet ${i}: failed);
}
}

output:

——–esprima——–
snippet 0: ok
snippet 1: ok
snippet 2: ok
snippet 3: failed
snippet 4: ok
——–acorn——–
snippet 0: ok
snippet 1: ok
snippet 2: ok
snippet 3: failed
snippet 4: ok

Python

import esprima

snippets = [
“class Foo {}”, # 0
“class Foo { constructor() {} }”, # 1
“class Foo { constructor() {}; bar() {} }”, # 2
“class Foo { constructor() {}; bar() {}; baz = () => {}; }”, # 3
“let baz = () => {}”, # 4
]

print(“——–esprima——–“)
for [i, snippet] in enumerate(snippets):
try:
esprima.parseScript(snippet)
print(f”snippet {i}: ok”)
except:
print(f”snippet {i}: failed”)

output:

——–esprima——–
snippet 0: ok
snippet 1: ok
snippet 2: ok
snippet 3: failed
snippet 4: ok

Como se puede ver, cuando se utilizan funciones de flecha como métodos, los analizadores anteriores fallarán. Esto no es bueno, ya que las clases del proyecto que intento analizar serán principalmente de sintaxis ES9 (await, async, operador de propagación, métodos de funciones de flecha, …) .

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Entonces mi pregunta es: ¿Hay algún otro analizador sintáctico que pueda manejar la sintaxis de es9 y se pueda usar para obtener una lista de todos los métodos de una clase de javascript?

Comments are closed.