diff --git a/src/Nixfmt/Predoc.hs b/src/Nixfmt/Predoc.hs index 2e91402f..f734cc4b 100644 --- a/src/Nixfmt/Predoc.hs +++ b/src/Nixfmt/Predoc.hs @@ -2,6 +2,7 @@ {-# LANGUAGE OverloadedStrings #-} module Nixfmt.Predoc ( + indentWidth, text, comment, trailingComment, @@ -130,6 +131,10 @@ instance (Pretty a, Pretty b) => Pretty (a, b) where instance (Pretty a, Pretty b, Pretty c) => Pretty (a, b, c) where pretty (a, b, c) = pretty a <> pretty b <> pretty c +-- | Default indentation spacing. +indentWidth :: Int +indentWidth = 2 + text :: Text -> Doc text "" = [] text t = [Text 0 0 RegularT t] @@ -337,7 +342,7 @@ mergeSpacings Break Softspace = Space mergeSpacings Break Hardspace = Space mergeSpacings Softbreak Hardspace = Softspace mergeSpacings (Newlines x) (Newlines y) = Newlines (x + y) -mergeSpacings Emptyline (Newlines x) = Newlines (x + 2) +mergeSpacings Emptyline (Newlines x) = Newlines (x + indentWidth) mergeSpacings Hardspace (Newlines x) = Newlines x mergeSpacings _ (Newlines x) = Newlines (x + 1) mergeSpacings _ y = y @@ -484,7 +489,7 @@ layoutGreedy tw doc = Text.concat $ evalState (go [Group RegularG doc] []) (0, s case textNL `compare` nl of -- Push the textNL onto the stack, but only increase the actual indentation (`ci`) -- if this is the first one of a line. All subsequent nestings within the line effectively get "swallowed" - GT -> putR ((if cc == 0 then ci + 2 else ci, textNL) <| indents) >> go' + GT -> putR ((if cc == 0 then ci + indentWidth else ci, textNL) <| indents) >> go' -- Need to go down one or more levels -- Just pop from the stack and recurse until the indent matches again LT -> putR (NonEmpty.fromList indents') >> putText textNL textOffset t @@ -534,7 +539,7 @@ layoutGreedy tw doc = Text.concat $ evalState (go [Group RegularG doc] []) (0, s -- [ # comment -- 1 -- ] - Text _ _ TrailingComment t | cc == 2 && fst (nextIndent xs) > lineNL -> putText' [" ", t] + Text _ _ TrailingComment t | cc == indentWidth && fst (nextIndent xs) > lineNL -> putText' [" ", t] where lineNL = snd $ NonEmpty.head indents Text nl off _ t -> putText nl off t @@ -611,14 +616,14 @@ layoutGreedy tw doc = Text.concat $ evalState (go [Group RegularG doc] []) (0, s _ -> grp (nl, off) = nextIndent grp' - indentWillIncrease = if fst (nextIndent rest) > lineNL then 2 else 0 + indentWillIncrease = if fst (nextIndent rest) > lineNL then indentWidth else 0 where lastLineNL = snd $ NonEmpty.head ci - lineNL = lastLineNL + (if nl > lastLineNL then 2 else 0) + lineNL = lastLineNL + (if nl > lastLineNL then indentWidth else 0) in fits indentWillIncrease (tw - firstLineWidth rest) grp' <&> \t -> runState (putText nl off t) (cc, ci) else - let indentWillIncrease = if fst (nextIndent rest) > lineNL then 2 else 0 + let indentWillIncrease = if fst (nextIndent rest) > lineNL then indentWidth else 0 where lineNL = snd $ NonEmpty.head ci in fits (indentWillIncrease - cc) (tw - cc - firstLineWidth rest) grp diff --git a/src/Nixfmt/Pretty.hs b/src/Nixfmt/Pretty.hs index bd4fd480..a1e1f6bf 100644 --- a/src/Nixfmt/Pretty.hs +++ b/src/Nixfmt/Pretty.hs @@ -21,6 +21,7 @@ import Nixfmt.Predoc ( hardline, hardspace, hcat, + indentWidth, line, line', nest, @@ -81,7 +82,7 @@ instance Pretty Trivium where comment (if isDoc then "/**" else "/*") <> hardline -- Indent the comment using offset instead of nest - <> offset 2 (hcat $ map prettyCommentLine c) + <> offset indentWidth (hcat $ map prettyCommentLine c) <> comment "*/" <> hardline where @@ -612,7 +613,7 @@ instance Pretty Expression where absorbAbs _ expr | isAbsorbableExpr expr = hardspace <> group' Priority (absorbExpr False expr) -- Force the content onto a new line when it is not absorbable and there are more than two arguments absorbAbs depth x = - (if depth <= 2 then line else hardline) <> pretty x + (if depth <= indentWidth then line else hardline) <> pretty x -- Attrset parameter pretty (Abstraction param colon (Term t))