42 votes

Existe-t-il un formateur de code Haskell?

J'avais l'habitude d'écrire

 data A = A {
      a :: Double
    }
    deriving(Eq, Show)
 

mais maintenant je préfère

 data A = A {
      a :: Double
    } deriving(Eq, Show)
 

Je pense que la réponse sera non, mais je demande quand même: y at-il un formateur de code pour Haskell?

54voto

Christopher Done Points 2699

Il n'y a haskell-src-exts qui va analyser votre code et il a un joli module d'impression pour l'impression de l'AST à une chaîne. E. g.

import Language.Haskell.Exts

main = interact codeFormat

codeFormat = check . fmap reformat . parseModuleWithComments where
  reformat = prettyPrint
  check r = case r of
              ParseOk a -> a
              ParseFailed loc err -> error $ show (loc,err)

Exemple:

λ> putStrLn $ codeFormat "module X where x = 1 where { y 1 = 2; y _ = 2 }"
module X where
x = 1
  where y 1 = 2
        y _ = 2

Alternativement, vous pouvez écrire une jolie imprimante vous-même (même basé sur la ci-dessus si vous voulez juste à se spécialiser), et puis vous pouvez avoir n'importe quel style que vous voulez. Remplacer prettyPrint avec votre propre. L'AST est très simple.

Ensuite, vous pouvez le brancher avec Emacs pour reformater à chaque fois que vous cliquez sur enregistrer ou de quelque chose.

11voto

user239558 Points 1548

Il existe un style élégant qui peut faire exactement ce que vous voulez.

4voto

Daniel Velkov Points 9244

J'ai écrit un petit script dans le même but: https://github.com/djv/small/blob/master/tidy.hs Je l'appelle de vim pour reformater mon code.

2voto

Zane XY Points 524

Pour imprimer un AST avec des commentaires, vous avez besoin d' ExactPrint.

 exactPrint :: ExactP ast => ast SrcSpanInfo -> [Comment] -> String
 

mais exactPrint n'imprimera pas vraiment vos sources.

J'ai écrit un petit outil que vous pouvez appeler avec Vim en tant que formateur externe.

 prettyHS :: String -> String
prettyHS src
  = case parseFileContentsWithComments defaultParseMode src of
        ParseOk (ast, _) -> prettyPrint ast
        _ -> src
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X