{-# LANGUAGE DeriveAnyClass, DeriveGeneric, DuplicateRecordFields, TemplateHaskell #-}
module TreeSitter.Python.AST where

import TreeSitter.Python.Internal
import TreeSitter.Language
import CodeGen.GenerateSyntax
import Control.Monad.IO.Class
import Data.Aeson
import Prelude hiding (Float, Integer, String)
import System.Directory
import System.FilePath.Posix
import Language.Haskell.TH.Syntax (loc_filename, location, runIO)

-- Regenerate template haskell code when these files change:
addDependentFileRelative "../../vendor/tree-sitter-python/src/node-types.json"

-- Auto-generate code from node-types.json
$(do
  currentFilename <- loc_filename <$> location
  pwd             <- runIO getCurrentDirectory
  let invocationRelativePath = takeDirectory (pwd </> currentFilename) </> "../../vendor/tree-sitter-python/src/node-types.json"
  input <- runIO (eitherDecodeFileStrict' invocationRelativePath)
  either fail (traverse datatypeForConstructors) input)