floskell 0.10.0 → 0.10.1
raw patch · 6 files changed
+45/−13 lines, 6 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.AlignConfig
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.Config
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.DeclarationConstruct
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.GroupConfig
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.ImportsGroup
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.ImportsGroupOrder
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.Indent
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.IndentConfig
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.Layout
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.LayoutConfig
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.LayoutContext
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.OpConfig
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.OptionConfig
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.PenaltyConfig
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.SortImportsRule
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.Whitespace
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.Config.WsLoc
- Floskell.Config: instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Floskell.Config.ConfigMap a)
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.AlignConfig
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.Config
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.DeclarationConstruct
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.GroupConfig
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.ImportsGroup
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.ImportsGroupOrder
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.Indent
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.IndentConfig
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.Layout
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.LayoutConfig
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.LayoutContext
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.OpConfig
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.OptionConfig
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.PenaltyConfig
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.SortImportsRule
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.Whitespace
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.Config.WsLoc
- Floskell.Config: instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Floskell.Config.ConfigMap a)
- Floskell.ConfigFile: instance Data.Aeson.Types.FromJSON.FromJSON Floskell.ConfigFile.AppConfig
- Floskell.ConfigFile: instance Data.Aeson.Types.ToJSON.ToJSON Floskell.ConfigFile.AppConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.AlignConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.Config
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.DeclarationConstruct
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.GroupConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.ImportsGroup
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.ImportsGroupOrder
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.Indent
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.IndentConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.Layout
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.LayoutConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.LayoutContext
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.OpConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.OptionConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.PenaltyConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.SortImportsRule
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.Whitespace
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON Floskell.Config.WsLoc
+ Floskell.Config: instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (Floskell.Config.ConfigMap a)
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.AlignConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.Config
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.DeclarationConstruct
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.GroupConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.ImportsGroup
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.ImportsGroupOrder
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.Indent
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.IndentConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.Layout
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.LayoutConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.LayoutContext
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.OpConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.OptionConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.PenaltyConfig
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.SortImportsRule
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.Whitespace
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON Floskell.Config.WsLoc
+ Floskell.Config: instance Data.Aeson.Types.Class.ToJSON a => Data.Aeson.Types.Class.ToJSON (Floskell.Config.ConfigMap a)
+ Floskell.ConfigFile: instance Data.Aeson.Types.Class.FromJSON Floskell.ConfigFile.AppConfig
+ Floskell.ConfigFile: instance Data.Aeson.Types.Class.ToJSON Floskell.ConfigFile.AppConfig
Files
- CHANGELOG.md +5/−0
- TEST.md +24/−0
- floskell.cabal +1/−1
- src/Floskell/Pretty.hs +13/−8
- src/Floskell/Printers.hs +1/−3
- stack.yaml +1/−1
CHANGELOG.md view
@@ -1,3 +1,8 @@+# Floskell 0.10.1 (2019-05-25)++* Fix for broken off-side rule with multi-line lists+* Fix for increasing comment indentation before instance declarations+ # Floskell 0.10.0 (2019-05-03) * Updated to haskell-src-exts-1.21.0, with support for `DerivingVia` and `TypeInType`
TEST.md view
@@ -773,6 +773,18 @@ else that ``` +Lists must not suppress onside.++``` haskell+foo = case x of+ [ y -- comment+ , z] -> bar++foo = do+ [ x -- comment+ , y ]+```+ ## Comments Don't be too eager in assigning comments to the following AST node.@@ -795,6 +807,18 @@ -- comments -- block -- two+```++... even when haskell-src-exts has weird column span info.++``` haskell+module Main where++-- comment+instance Foo Bar where+ foo = undefined++bar = undefined ``` Only comments.
floskell.cabal view
@@ -1,5 +1,5 @@ name: floskell-version: 0.10.0+version: 0.10.1 synopsis: A flexible Haskell source code pretty printer description: A flexible Haskell source code pretty printer. .
src/Floskell/Pretty.hs view
@@ -146,7 +146,7 @@ printComment :: Int -> Comment -> Printer () printComment correction Comment{..} = do col <- getNextColumn- let padding = max 0 $ srcSpanStartColumn commentSpan + correction - col+ let padding = max 0 $ srcSpanStartColumn commentSpan + correction - col - 1 case commentType of PreprocessorDirective -> do nl <- gets psNewline@@ -186,7 +186,10 @@ when (loc == After && not nl && notSameLine firstComment) newline col <- getNextColumn- forM_ comments $ printComment (col - srcSpanEndColumn ssi)+ let correction = case loc of+ Before -> col - srcSpanStartColumn ssi + 1+ After -> col - srcSpanEndColumn ssi + 1+ forM_ comments $ printComment correction -- Write newline before restoring onside indent. eol <- gets psEolComment@@ -282,11 +285,13 @@ printComments' Before x cut . onside $ prettyPrint x printComments After x- forM_ xs' $ \x' -> do- printComments Before x'- column sepCol $ operatorV ctx sep- cut . onside $ prettyPrint x'- printComments After x'+ -- `column sepCol` must not be within `column itemCol`, or the+ -- former can suppress onside for the latter.+ forM_ xs' $ \x' -> do+ column itemCol $ printComments Before x'+ column sepCol $ operatorV ctx sep+ column itemCol $ cut . onside $ prettyPrint x'+ column itemCol $ printComments After x' listH :: (Annotated ast, Pretty ast) => LayoutContext@@ -635,7 +640,7 @@ vertical = do pretty fn- withIndent cfgIndentApp $ linedOnside args+ withIndent cfgIndentApp $ lined args prettyInfixApp :: (Annotated ast, Pretty ast, Annotated op, HSE.Pretty (op NodeInfo))
src/Floskell/Printers.hs view
@@ -295,9 +295,7 @@ aligned :: Printer a -> Printer a aligned p = do col <- getNextColumn- column col $ do- modify $ \s -> s { psOnside = 0 }- p+ column col p indented :: Printer a -> Printer a indented p = do
stack.yaml view
@@ -1,4 +1,4 @@-resolver: lts-13.6+resolver: lts-13.22 packages: - '.' extra-deps: