indentation – Aplicar sangría a las funciones de flecha de JavaScript como funciones anónimas regulares

Pregunta:

Usando Emacs 25.1 y js-mode para la edición de javascript.

¿Es posible cambiar las reglas de sangría en el modo js para personalizar la sangría de las funciones de flecha?

Ejemplo de sangría de función anónima:

const x = list.map(function (x) {
  return someCoolFunction(x)
    .maybeEvenAChain()
    .or(two)
})

Cómo me gustaría sangrar las funciones de flecha:

const x = list.map(x =>
  someCoolFunction(x)
    .maybeEvenAChain()
    .or(two)
)

Esto es lo que emacs está haciendo ahora mismo:

const x = list.map(x =>
                   someCoolFunction(x)
                   .maybeEvenAChain()
                   .or(two)
                   )

ACTUALIZAR:

He examinado el código de sangría de js.el y parece haber dos razones por las que las funciones de flecha no tienen sangría como las funciones anónimas.

  1. Si un par de apertura, un cuadrado o una llave tiene algún texto a la derecha, todo el texto del interior se sangrará en la columna de la primera palabra después de la puntuación de apertura. Además, la puntuación de cierre se sangrará en la misma columna de la puntuación de apertura.

    Este es el comportamiento deseado para los objetos literales y la lista de argumentos tanto de las definiciones de funciones como de las llamadas.

    Esta funcionalidad está definida en js--proper-indentation

  2. Si se hace una excepción para el operador de flecha => para resolver el primer problema, surge un segundo problema. El operador de flecha es considerado una expresión continua por js--continued-expression-p . El cuerpo de la función de flecha se sangrará a (* 2 js-indent-level) . Esto alinea el cuerpo con cualquier expresión continua real dentro del cuerpo, que se ve bastante desordenado.

Todavía estoy buscando una forma integral de resolver el problema.

Respuesta:

He escrito una solución basada en el código de sangría de js.el y la he llamado js-align , simular to cc-align . Si está interesado, el código está disponible aquí github.com/johnhooks/js-align . Todavía no es perfecto, aunque planeo continuar haciéndolo. Si tiene alguna sugerencia, no dude en hacérmelo saber.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım