Faça o parágrafo de preenchimento na documentação do python deixar as aspas triplas em uma linha separada

16

Eu digito um python docstring tudo em uma linha como esta:

"""
This is a long docstring. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis.
"""

e depois clico em Mq ( fill-paragraph) e recebo o seguinte:

"""This is a long docstring. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Donec a diam lectus. Sed sit amet ipsum
mauris. Maecenas congue ligula ac quam viverra nec consectetur ante
hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas
mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non
tortor. Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed,
adipiscing id dolor. Pellentesque auctor nisi id magna consequat
sagittis.

"""

Eu tenho dois problemas com isso:

  1. A sequência de documentos começa na mesma linha que """- eu preferiria que as aspas triplas permanecessem em sua própria linha.
  2. (Prioridade muito mais baixa.) A sequência de caracteres termina com uma linha em branco.

O exemplo acima é artificial, mas eu me deparo com isso frequentemente, especialmente ao editar documentos existentes, onde eu gostaria de simplificar M-qe refazer todo o parágrafo.

bstpierre
fonte

Respostas:

15

Personalize de python-fill-docstring-styleacordo, presumindo que você esteja usando o Modo Python embutido no Emacs 24.4. O padrão é o pep-257que leva ao estilo que você observou, ou seja, nenhuma nova linha no início e duas novas linhas antes do final de uma doutrina.

Altere essa variável para symmetricou djangopara que o Modo Python obedeça ao seu estilo preferido, ou seja, uma nova linha no início da documentação e uma nova linha antes do final:

(setq python-fill-docstring-style 'django)

Como alternativa, defina-o através de Variáveis ​​de Diretório , para configurar o estilo da sequência de caracteres individualmente por projeto.

symmetrice djangosão diferentes documentos de linha única wrt. O primeiro coloca as aspas triplas na mesma linha se uma seqüência de caracteres se encaixa em uma linha, enquanto o último coloca as aspas triplas em linhas separadas nesse caso.

Dê uma olhada na documentaçãopython-fill-docstring-style para ver todas as opções disponíveis.

lunaryorn
fonte
-1

Com a linha vazia no final, parece um bug simples, por favor relate-o com M-x report-emacs-bug. Mas, para o primeiro elemento, não tenho certeza se é um bug ou um recurso, então você pode mencioná-lo em seu relatório de erros, mas talvez a resposta seja que ele está apenas seguindo a convenção "PEP-NNN".

Dito isto, você poderá corrigir o primeiro problema com o seguinte:

(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'paragraph-separate)
                 (concat paragraph-separate "\\|^[ \t]*\"\"\"[ \t]*$"))))
Stefan
fonte
11
Não é um bug, nem você precisa mudar paragraph-separate. O estilo de docstring de python.elé personalizável.
lunaryorn
Uau, eu nunca imaginaria que uma linha extra vazia no final da doutrina poderia ser algo imposto por um padrão.
Stefan
11
O padrão (PEP 257) na verdade não impõe isso, é apenas uma interpretação (comum) dele. O Emacs também suporta a variante sem uma nova linha à direita, como pep-257-nnem python-fill-docstring-style.
lunaryorn
11
Ironicamente, o motivo do link em branco é: a menos que toda a sequência de caracteres caiba em uma linha, coloque as aspas finais em uma linha por si próprias. Dessa forma, o comando de preenchimento de parágrafo do Emacs pode ser usado nele.
Felipe Felipe