packages feed

hindent-6.3.0: src/HIndent/Ast/Expression/FieldSelector.hs

{-# LANGUAGE RecordWildCards #-}

module HIndent.Ast.Expression.FieldSelector
  ( FieldSelector
  , mkFieldSelector
  ) where

import qualified GHC.Data.FastString as GHC
import qualified GHC.Hs as GHC
import HIndent.Ast.Name.Prefix (PrefixName, fromString)
import HIndent.Ast.NodeComments (NodeComments(..))
import HIndent.Ast.WithComments (WithComments, fromGenLocated)
import {-# SOURCE #-} HIndent.Pretty (Pretty(..), pretty)
import HIndent.Pretty.NodeComments (CommentExtraction(..))
import qualified Language.Haskell.Syntax.Basic as GHC

newtype FieldSelector = FieldSelector
  { name :: WithComments PrefixName
  }

instance CommentExtraction FieldSelector where
  nodeComments FieldSelector {} = NodeComments [] [] []

instance Pretty FieldSelector where
  pretty' FieldSelector {..} = pretty name

mkFieldSelector :: GHC.DotFieldOcc GHC.GhcPs -> FieldSelector
mkFieldSelector GHC.DotFieldOcc {..} =
  FieldSelector
    { name =
        fmap
          (fromString . GHC.unpackFS . GHC.field_label)
          (fromGenLocated dfoLabel)
    }