From 4adb99e683b81df9d572c05db06e6fb688fb007a Mon Sep 17 00:00:00 2001 From: Alexander Foremny Date: Wed, 4 Oct 2023 10:01:50 +0200 Subject: bring issue extraction on-par with shell script --- app/TreeGrepper/FileType.hs | 76 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 app/TreeGrepper/FileType.hs (limited to 'app/TreeGrepper/FileType.hs') diff --git a/app/TreeGrepper/FileType.hs b/app/TreeGrepper/FileType.hs new file mode 100644 index 0000000..843eaf1 --- /dev/null +++ b/app/TreeGrepper/FileType.hs @@ -0,0 +1,76 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} + +module TreeGrepper.FileType + ( FileType (..), + all, + Info (..), + BlockInfo (..), + info, + ) +where + +import Data.Aeson (FromJSON (parseJSON)) +import Data.Text (Text) +import Prelude hiding (all) + +data FileType + = Elm + | Haskell + | Nix + | Shell + deriving (Show) + +instance FromJSON FileType where + parseJSON v = + parseJSON v >>= \case + "elm" -> pure Elm + "haskell" -> pure Haskell + "nix" -> pure Nix + "sh" -> pure Shell + fileType -> fail ("parsing file_type failed, got " ++ fileType) + +all :: [FileType] +all = + [ Elm, + Haskell, + Nix, + Shell + ] + +data Info = Info + { exts :: [String], + lineStart :: Text, + block :: Maybe BlockInfo + } + +data BlockInfo = BlockInfo + { blockStart :: [Text], + blockEnd :: Text + } + +info :: FileType -> Info +info Elm = + Info + { exts = [".elm"], + lineStart = "--", + block = Just BlockInfo {blockStart = ["{-|", "{-"], blockEnd = "-}"} + } +info Haskell = + Info + { exts = [".hs"], + lineStart = "--", + block = Just BlockInfo {blockStart = ["{-"], blockEnd = "-}"} + } +info Nix = + Info + { exts = [".nix"], + lineStart = "#", + block = Just BlockInfo {blockStart = ["/*"], blockEnd = "*/"} + } +info Shell = + Info + { exts = [".sh"], + lineStart = "#", + block = Nothing + } -- cgit v1.2.3