aboutsummaryrefslogtreecommitdiffstats
path: root/app/Comment/Language.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/Comment/Language.hs')
-rw-r--r--app/Comment/Language.hs51
1 files changed, 38 insertions, 13 deletions
diff --git a/app/Comment/Language.hs b/app/Comment/Language.hs
index 925cf56..7a9963f 100644
--- a/app/Comment/Language.hs
+++ b/app/Comment/Language.hs
@@ -1,6 +1,8 @@
+{-# LANGUAGE DerivingStrategies #-}
+
module Comment.Language
( Language (..),
- fromExtension,
+ fromPath,
parser,
lineStart,
block,
@@ -10,31 +12,54 @@ where
import Control.Exception (throw)
import Data.Binary (Binary)
+import Data.Languages qualified as L
+import Data.List.NonEmpty qualified as N
+import Data.Maybe (fromMaybe)
import Data.Text qualified as T
import Exception qualified as E
import Foreign.Ptr (Ptr)
import GHC.Generics (Generic)
import TreeSitter qualified as S
-data Language
- = Haskell
- deriving (Eq, Show, Generic, Binary)
+newtype Language = Language {languageKey :: L.LanguageKey}
+ deriving (Eq, Show, Generic)
+ deriving newtype (Binary)
-fromExtension :: String -> Language
-fromExtension ".hs" = Haskell
-fromExtension ext = throw $ E.UnknownFileExtension ext
+fromPath :: FilePath -> N.NonEmpty Language
+fromPath fp =
+ fromMaybe (throw $ E.UnknownFile fp)
+ . N.nonEmpty
+ . map (Language . L.languageName)
+ $ L.languagesForPath fp
--- TODO add languages elm, shell, nix
+-- TODO Add support for all tree-sitter supported languages
--
--- @supersedes add-support-for-all-tree-grepper-supported-files
+-- @backlog
parser :: Language -> Ptr S.Language
-parser Haskell = S.tree_sitter_haskell
+parser (Language "C") = S.tree_sitter_c
+parser (Language "Elm") = S.tree_sitter_elm
+parser (Language "Haskell") = S.tree_sitter_haskell
+parser (Language "Nix") = S.tree_sitter_nix
+parser (Language "Shell") = S.tree_sitter_bash
+parser (Language {languageKey}) = throw (E.UnsupportedLanguage languageKey)
lineStart :: Language -> T.Text
-lineStart Haskell = "--"
+lineStart (Language "C") = "//"
+lineStart (Language "Elm") = "--"
+lineStart (Language "Haskell") = "--"
+lineStart (Language "Nix") = "#"
+lineStart (Language "Shell") = "#"
+lineStart (Language {languageKey}) = throw (E.UnsupportedLanguage languageKey)
block :: Language -> Maybe ([T.Text], T.Text)
-block Haskell = Just (["{-"], "-}")
+block (Language "C") = Just (["/*"], "*/")
+block (Language "Elm") = Just (["{-|", "{-"], "-}")
+block (Language "Haskell") = Just (["{-"], "-}")
+block (Language "Nix") = Just (["/*"], "*/")
+block (Language "Shell") = Nothing
+block (Language {languageKey}) = throw (E.UnsupportedLanguage languageKey)
nodeTypes :: Language -> [String]
-nodeTypes Haskell = ["comment"]
+nodeTypes (Language "Haskell") = ["comment"]
+nodeTypes (Language "Shell") = ["comment"]
+nodeTypes (Language {languageKey}) = throw (E.UnsupportedLanguage languageKey)