Como reformatar / reindentar todos os arquivos de origem em um determinado diretório?

14

Dado um diretório contendo uma árvore de fontes, existe uma maneira simples de linha de comando para substituir cada arquivo de origem com seu equivalente maravilhosamente reformatado?

Lembre-se de que normalmente uma árvore de fontes para um projeto também contém arquivos que não são de origem, e as próprias fontes podem estar em idiomas diferentes.

Estou à procura de alguma ferramenta que suporte o maior número possível de idiomas, porque um projeto geralmente contém fontes em muitos idiomas diferentes. Em particular, eu estaria procurando algo que suporte xml / html, javascript, ruby e java.

    
por fdierre 24.01.2012 / 17:01

4 respostas

7

Você pode usar o vim no ex e no modo de comando, a partir do terminal.

Para recuar um único arquivo:

vim -c "normal gg=G" -e <file-to-indent> <<'EOF'
:wq
EOF

Para recuar os arquivos recursivamente, crie o seguinte script:

indent-with-vim.sh

vim -c "normal gg=G" -e  <<'EOF'
:wq
EOF

Agora, digite:

$ chmod u+x indent-with-vim.sh
$ find . | xargs -I {} ./indent-with-vim.sh {}

O Vim fará o melhor para reindentar os arquivos. Você pode melhorar alguns tipos de arquivos específicos.

Para XML:

  • Instale xmllint Adicione ao seu .vimrc

    au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
    

Para melhorar a formatação do PHP:

Faça o download do link (vai baixar um arquivo chamado php.vim)

Crie os seguintes diretórios em sua casa:

~/.vim/indent

E copie php.vim para ~/.vim/indent

Se você não estiver satisfeito com o resultado de qualquer tipo de arquivo, poderá procurar alternativas na Web (como htb para HTML, link para melhorias no Ruby, e assim por diante).

De qualquer forma, você usaria ou a técnica .vimrc ou o arquivo foo.vim indent para melhorar o recuo.

Além disso, você pode alterar os parâmetros de localização para se aplicarem apenas a alguns tipos específicos, como:

find . -iname "*.html" -or -iname "*.xml"
    
por taksan 29.02.2012 / 18:58
2

Instale o pacote indent e execute o programa nos arquivos.

    
por psusi 24.01.2012 / 17:07
0

Não é grátis, não é linha de comando, provavelmente muito complicado, mas IntelliJ Idea é uma IDE que é capaz de fazer isso . Eu não testei com java ou ruby, mas funciona muito bem com um projeto de django (python + javascript + HTML).

Ele também tem uma ampla variedade de opções para configurar o que reformatar.

Se este for um problema único, você pode fazer o download de uma avaliação gratuitamente.

Esta é uma captura de tela das opções de formato HTML. É tirado do PyCharm (a versão limitada do python, não há suporte a ruby ou java aqui), pois é o que eu uso, mas o IntelliJ deve ser o mesmo, mas suporta muito mais idiomas.

    
por Javier Rivera 29.02.2012 / 17:09
0

Formato Java do Google

Reformata o código-fonte Java para estar em conformidade com o Google Java Style:

link

wget https://github.com/google/google-java-format/releases/download/google-java-format-1.5/google-java-format-1.5-all-deps.jar
java -jar google-java-format-1.5-all-deps.jar /path/to/MyClass.java

Dicas:

  • Para fazer isso em arquivos multipe, use a opção --replace , junto com xargs
  • Use sponge para poder sobrescrever diretamente o arquivo de entrada
  • Existe um plugin do Eclipse e IntelliJ para executar a mesma reformatação
por Sridhar-Sarnobat 09.11.2017 / 19:48