Js-beautify: HTML: Proposta para organizar as configurações de encapsulamento de atributos

Criado em 31 mai. 2018  ·  9Comentários  ·  Fonte: beautify-web/js-beautify

Extraído de #1297.

O que nós temos

wrap_attributes :

  • auto - habilita o agrupamento de atributos.
  • force - o primeiro atributo permanece, outros agrupados com "wrap_attributes_indent_size"
  • force-aligned - o primeiro atributo fica, os outros são agrupados e alinhados com o primeiro
  • force-expand-multiline - Se houver mais de 1 atributo, TODOS os atributos são encapsulados, não importa o que seja, e recuados com "wrap_attributes_indent_size". E: o fechamento '>' da tag de abertura também está na nova linha. Este modo está atualmente quebrado, produz arquivos indentados incorretamente :(

Há também vários esforços para fornecer alguns modos adicionais que lidam com o encapsulamento de elementos html longos com vários atributos: #1285 e #1262.

Eu acho que existem várias preocupações (ortogonais) aqui e colocá-las todas em um único valor criaria mais confusão e explosão de nomes de opções estranhas se quisermos lidar com todos os casos.

Então, vamos separar quebra, alinhamento e número de atributos por linha, etc.

Proposta

wrap_attributes_mode :

  • none - Nós simplesmente não agrupamos atributos, ponto final. (necessário?)
  • auto - Encapsulamento de atributo normal, este deve ser o padrão, provavelmente, como o caso mais lógico. Quando a linha é muito grande, nós embrulhamos. Se todos os atributos puderem caber em uma única linha, eles permanecerão em uma única linha, sem quebra. (Predefinição.)
  • force - Envolvemos com força se houver mais de 1 atributo presente, caso contrário, auto.

Quando o encapsulamento está em ação, as seguintes propriedades estão em jogo. Se nenhum embrulho acontecer, eles não desempenham nenhum papel.

wrapped_attributes_per_line :

  • multiple - Embalagem suave, padrão . Ajuste quantos attrs por linha forem permitidos.
  • single - O primeiro atributo fica na primeira linha, os outros ficam em linhas separadas.
  • single-all - Todos os atributos, incluindo o primeiro, colocados em linhas separadas. Assim, cada atributo está em uma linha separada, e o elemento/tag line não tem atributos restantes.

wrapped_attributes_indent :

  1. auto -- Usa wrap_attributes_indent_size , default .
  2. alinhado -- Todas as linhas de atributo começam alinhadas com o primeiro atributo. Se o primeiro atributo estiver em uma nova linha (modo "single-all" de wrapped_attributes_per_line ), então usamos wrap_attributes_indent_size para calcular o recuo.

wrapped_attributes_end :

  • auto - padrão
  • multiline - o > fechamento está na linha separada.

Exemplos

  1. Caso DEFAULT: Nós fazemos um soft wrap e tentamos ajustar o maior número possível de atributos por linha, mas dentro do limite de comprimento de linha.
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = auto
wrapped_attributes_end = auto
  1. caso #1285. Muito semelhante ao caso padrão, mas alinhamos os atributos encapsulados para estarem no mesmo nível de recuo do primeiro atributo.
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
  1. caso #1262. Quando quebramos, queremos um atributo por linha, alinhado com o primeiro.
wrap_attributes_mode = auto
wrapped_attributes_per_line = single
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
  1. Caso force-expand-multiline atual: Força a quebra se houver mais de 1 atributo, com um atributo por linha e com finalização de várias linhas, colocando o > fechamento na nova linha.
wrap_attributes_mode = force
wrapped_attributes_per_line = single-all
wrapped_attributes_indent = auto
wrapped_attributes_end = multiline
javascript discussion enhancement

Comentários muito úteis

Gostei da sua proposta, e acho que uma implementação ainda mais simples que poderia resolver muitos problemas para algumas pessoas, seria a opção de configurar o ponto em que "force" usa auto. Por exemplo, sendo capaz de dizer, se tiver menos que atributos X, use auto, caso contrário, force wrap.

Todos 9 comentários

@vvs
Incrível obrigado!

Parece que há uma sobreposição entre force e multiple , mas algum conflito é provavelmente inevitável com a complexidade das configurações

Como eu disse, gosto dos nomes de valor que você escolheu em geral. Acho que mudaria wrapped_attributes_end para expand-multiline - porque só se expande quando o elemento é um elemento de várias linhas.

Parece que você se opõe ao uso de uma lista de valores separados por vírgulas da maneira que brace-style faz ( [collapse|expand|end-expand|none][,preserve-inline] ). Pergunto apenas porque não gosto de ter mais campos de opção quando um só pode funcionar.

Olá @bitwiseman. Sim, há um pouco de sobreposição entre force e multiple . Basicamente, "forçar" os vários atributos é igual auto :)

Também estou bem com expand-multiline .

Parece que você se opõe ao uso de um valor separado por vírgula

Pessoalmente, posso viver com qualquer coisa, mesmo que as configurações sejam valores codificados em BASE64! O principal é que consigo ajustar o comportamento de formatação às necessidades da minha/equipe (que atualmente estão alinhadas com #1262).

Mas, por uma questão de preferência, é melhor ter "grupos de opções" separados para que eu possa modificá-los independentemente e pensar em preocupações diferentes (ortogonais) de forma independente. E, acima de tudo, fica muito mais fácil documentar as configurações separadamente em comparação com uma enorme lista de todas as combinações possíveis.

@vvs
Bom ponto sobre ter configurações separadas para comportamentos distintos.

Gostei da sua proposta, e acho que uma implementação ainda mais simples que poderia resolver muitos problemas para algumas pessoas, seria a opção de configurar o ponto em que "force" usa auto. Por exemplo, sendo capaz de dizer, se tiver menos que atributos X, use auto, caso contrário, force wrap.

Eu gostaria de usar "aligned-multiple" se estiver usando <= 3 atributos, caso contrário, "force-aligned". Isso é possível no momento?

@otonielguajardo

Não existe atualmente.

O que você está pedindo é semelhante ao nº 1262, que é basicamente "Permitir atributos uma linha, a menos que eles sejam agrupados, nesse caso, alinhe-os".
Parece que @Adondriel solicitou algo parecido com o que você deseja (com base na contagem de atributos) nesse problema também.

algum avanço?

Algum plano para rever isso?

@notiv-nt @Drumstix42
Com meu tempo disponível limitado, tenho consertado outros bugs.
Isso ainda vale a pena fazer, mas requer que alguém reserve um tempo para terminar o design e implementá-lo.

Esta página foi útil?
0 / 5 - 0 avaliações