Skip to content

Commit

Permalink
define a variable for the amount of indented spaces
Browse files Browse the repository at this point in the history
makes it easier to override or, hopefully in the future, make
configurable
  • Loading branch information
toastal committed Jun 26, 2024
1 parent c67a7b6 commit b882027
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 8 deletions.
17 changes: 11 additions & 6 deletions src/Nixfmt/Predoc.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{-# LANGUAGE OverloadedStrings #-}

module Nixfmt.Predoc (
indentWidth,
text,
comment,
trailingComment,
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions src/Nixfmt/Pretty.hs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import Nixfmt.Predoc (
hardline,
hardspace,
hcat,
indentWidth,
line,
line',
nest,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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))
Expand Down

0 comments on commit b882027

Please sign in to comment.