Js-beautify: HTML: propuesta para organizar la configuración de ajuste de atributos

Creado en 31 may. 2018  ·  9Comentarios  ·  Fuente: beautify-web/js-beautify

Extraído de #1297.

Que tenemos

wrap_attributes :

  • auto - habilita el ajuste de atributos.
  • force : el primer atributo permanece, los demás se envuelven con "wrap_attributes_indent_size"
  • force-aligned - el primer atributo permanece, otros envueltos y alineados con el primero
  • force-expand-multiline : si hay más de 1 atributo, TODOS los atributos se envuelven sin importar qué y se sangran con "wrap_attributes_indent_size". Y: el cierre '>' de la etiqueta de apertura también está en la nueva línea. Este modo está actualmente roto, produce archivos mal sangrados :(

También hay múltiples esfuerzos para proporcionar algunos modos adicionales que se ocupan de la envoltura de elementos html largos con múltiples atributos: #1285 y #1262.

Creo que hay múltiples preocupaciones (ortogonales) aquí y ponerlas todas en un solo valor crearía más confusión y una explosión de nombres de opciones extraños si vamos a manejar todos los casos.

Entonces, separemos el ajuste, la alineación y la cantidad de atributos por línea, etc.

Propuesta

wrap_attributes_mode :

  • none : simplemente no envolvemos los atributos, punto. (¿necesario?)
  • auto - Ajuste de atributo normal, este debería ser el predeterminado, probablemente, como el caso más lógico. Cuando la línea es demasiado grande, envolvemos. Si todos los atributos pueden caber en una sola línea, permanecen en la misma línea, sin envolver. (Por defecto.)
  • force - Envolvemos a la fuerza si hay más de 1 atributo presente, de lo contrario, automático.

Cuando el envoltorio está en acción, las siguientes propiedades están en juego. Si no se envuelve, no juegan ningún papel.

wrapped_attributes_per_line :

  • multiple - Envoltura blanda, por defecto . Ajuste tantos atributos por línea como sea posible.
  • single - El primer atributo permanece en la primera línea, los demás están en líneas separadas.
  • single-all - Todos los atributos, incluido el primero, colocados en líneas separadas. Por lo tanto, cada atributo está en una línea separada y al elemento/etiqueta no le quedan atributos.

wrapped_attributes_indent :

  1. auto -- Usa wrap_attributes_indent_size , por defecto .
  2. alineado: todas las líneas de atributo comienzan alineadas con el primer atributo. Si el primer atributo está en una nueva línea (modo "único-todo" de wrapped_attributes_per_line ), entonces usamos wrap_attributes_indent_size para calcular la sangría.

wrapped_attributes_end :

  • auto - predeterminado
  • multiline - el cierre > está en la línea separada.

Ejemplos

  1. Caso PREDETERMINADO: ajustamos suavemente e intentamos ajustar tantos atributos por línea como sea posible, pero dentro del límite de longitud de línea.
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = auto
wrapped_attributes_end = auto
  1. Caso #1285. Muy similar al caso predeterminado, pero alineamos los atributos envueltos para que estén en el mismo nivel de sangría que el primer atributo.
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
  1. Caso #1262. Cuando ajustamos, queremos un atributo por línea, alineado con el primero.
wrap_attributes_mode = auto
wrapped_attributes_per_line = single
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
  1. Caso actual force-expand-multiline : fuerce el ajuste si hay más de 1 atributo, con un atributo por línea y con un final de varias líneas, colocando el cierre > en la nueva línea.
wrap_attributes_mode = force
wrapped_attributes_per_line = single-all
wrapped_attributes_indent = auto
wrapped_attributes_end = multiline
javascript discussion enhancement

Comentario más útil

Me gusta tu propuesta, y creo que una implementación aún más simple que podría resolver muchos problemas para algunas personas, sería la opción de configurar el punto en el que "force" usa auto. Por ejemplo, poder decir, si tiene menos de X atributos, use automático, de lo contrario, fuerce el ajuste.

Todos 9 comentarios

@vvs
¡Genial gracias!

Parece que hay una superposición entre force y multiple , pero es probable que algún conflicto sea inevitable debido a la complejidad de la configuración.

Como dije, me gustan los nombres de valor que ha elegido en general. Creo que cambiaría wrapped_attributes_end a expand-multiline , porque solo se expande cuando el elemento es un elemento multilínea.

Parece que se opondría a usar una lista de valores separados por comas como lo hace brace-style ( [collapse|expand|end-expand|none][,preserve-inline] ). Solo pregunto porque no me gusta tener más campos de opciones cuando uno solo puede funcionar.

Hola @bitwiseman. Sí, hay un poco de superposición entre force y multiple . Básicamente, "forzar" los múltiples atributos equivale a auto :)

También estoy bien con expand-multiline .

Parece que se opondría a usar un valor separado por comas

Personalmente, puedo vivir con cualquier cosa, ¡incluso si las configuraciones son valores codificados en BASE64! Lo principal es que puedo ajustar el comportamiento de formato a las necesidades de mi equipo (que actualmente están en línea con el n.º 1262).

Pero como una cuestión de preferencia, tener "grupos de opciones" separados es mejor para poder modificarlos de forma independiente y pensar en diferentes preocupaciones (ortogonales) de forma independiente. Y, sobre todo, hace mucho más fácil documentar las configuraciones por separado en comparación con una enorme lista de todas las combinaciones posibles.

@vvs
Buen punto sobre tener configuraciones separadas para comportamientos distintos.

Me gusta tu propuesta, y creo que una implementación aún más simple que podría resolver muchos problemas para algunas personas, sería la opción de configurar el punto en el que "force" usa auto. Por ejemplo, poder decir, si tiene menos de X atributos, use automático, de lo contrario, fuerce el ajuste.

Me gustaría usar "múltiple alineado" si uso <= 3 atributos, de lo contrario, "alineado forzado". ¿Es esto posible en este momento?

@otonielguajardo

No existe actualmente.

Lo que está pidiendo es similar al n. ° 1262, que es básicamente "Permitir atributos en una línea a menos que se vayan a ajustar, en cuyo caso alinéelos".
Parece que @Adondriel también solicitó algo como lo que desea (según el recuento de atributos) en ese problema.

algun avance?

¿Algún plan para volver a visitar esto?

@notiv-nt @Drumstix42
Con mi tiempo disponible limitado, he estado solucionando otros errores.
Todavía vale la pena hacerlo, pero requiere que alguien se tome el tiempo para terminar el diseño e implementarlo.

¿Fue útil esta página
0 / 5 - 0 calificaciones