Extraído de #1297.
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 primeiroforce-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.
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
:
wrap_attributes_indent_size
, default .wrapped_attributes_per_line
), então usamos wrap_attributes_indent_size
para calcular o recuo.wrapped_attributes_end
:
auto
- padrãomultiline
- o >
fechamento está na linha separada.wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = auto
wrapped_attributes_end = auto
wrap_attributes_mode = auto
wrapped_attributes_per_line = multiple
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
wrap_attributes_mode = auto
wrapped_attributes_per_line = single
wrapped_attributes_indent = aligned
wrapped_attributes_end = auto
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
@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.
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.