Skip to content

Commit 186c987

Browse files
author
Patrick Thomson
committed
Regenerate everything.
1 parent 5efe1c5 commit 186c987

File tree

11 files changed

+50115
-133
lines changed

11 files changed

+50115
-133
lines changed

WORKSPACE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ load(
3838
# Download a GHC binary distribution from haskell.org and register it as a toolchain.
3939
rules_haskell_toolchains(
4040
locale = "en_US.UTF-8",
41-
version = "8.10.1",
41+
version = "8.10.2",
4242
)
4343

4444
# Enable GHC persistent worker mode, if that's your bag.

semantic-ast/BUILD.bazel

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,20 @@ haskell_library(
4848
],
4949
)
5050

51-
all_ts_deps = ["@tree-sitter-{name}//:tree-sitter-{name}".format(name = name) for name in [
51+
all_ts_deps = ["@tree-sitter-{name}".format(name = name) for name in [
52+
"go",
53+
"java",
54+
"json",
55+
"php",
56+
"python",
57+
"ql",
58+
"ruby",
59+
"rust",
60+
"tsx",
61+
"typescript",
62+
]]
63+
64+
all_file_deps = ["@tree-sitter-{name}//:src/node-types.json".format(name = name) for name in [
5265
"go",
5366
"java",
5467
"json",
@@ -65,20 +78,21 @@ haskell_binary(
6578
name = "generate-ast",
6679
srcs = glob(["app/**/*.hs"]),
6780
compiler_flags = GHC_FLAGS + EXECUTABLE_FLAGS + ["-XStrictData"],
81+
data = all_file_deps,
6882
deps = [
6983
":semantic-ast",
70-
"//semantic-source",
7184
"//:base",
7285
"//:filepath",
7386
"//:process",
7487
"//:template-haskell",
7588
"//:text",
89+
"//semantic-source",
90+
"@stackage//:bazel-runfiles",
7691
"@stackage//:directory",
7792
"@stackage//:generic-lens",
7893
"@stackage//:lens",
79-
"@stackage//:tree-sitter",
80-
"@stackage//:bazel-runfiles",
8194
"@stackage//:neat-interpolation",
8295
"@stackage//:optparse-generic",
96+
"@stackage//:tree-sitter",
8397
] + all_ts_deps,
8498
)

semantic-ast/app/Main.hs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
module Main (main) where
1414

1515
import AST.GenerateSyntax
16+
import qualified Bazel.Runfiles as Bazel
1617
import Control.Lens (Traversal', mapped, (%~))
1718
import Control.Monad
1819
import Data.Foldable
@@ -28,10 +29,12 @@ import Language.Haskell.TH.Lens
2829
import NeatInterpolation
2930
import qualified Options.Generic as Opt
3031
import Source.Language
32+
import System.FilePath
3133
import System.Directory
3234
import System.Exit
3335
import System.IO
3436
import System.Process
37+
import Text.Printf
3538
import qualified TreeSitter.Go as Go (tree_sitter_go)
3639
import qualified TreeSitter.JSON as JSON (tree_sitter_json)
3740
import qualified TreeSitter.Java as Java (tree_sitter_java)
@@ -44,7 +47,7 @@ import qualified TreeSitter.TSX as TSX (tree_sitter_tsx)
4447
import qualified TreeSitter.TypeScript as TypeScript (tree_sitter_typescript)
4548

4649
-- As a special case, you can pass
47-
data Config = Config {language :: Text, path :: FilePath, rootdir :: Maybe FilePath}
50+
data Config = Config {language :: Text, rootdir :: FilePath}
4851
deriving stock (Show, Generic)
4952
deriving anyclass (Opt.ParseRecord)
5053

@@ -65,6 +68,37 @@ adjust = _InstanceD . typed . mapped %~ (values %~ truncate) . (functions %~ tru
6568
truncate :: Name -> Name
6669
truncate = mkName . nameBase
6770

71+
pathForLanguage :: Bazel.Runfiles -> Language -> FilePath
72+
pathForLanguage rf =
73+
let loc = Bazel.rlocation rf
74+
in \case
75+
CodeQL -> loc "tree-sitter-ql/vendor/tree-sitter-ql/src/node-types.json"
76+
Go -> loc "tree-sitter-go/vendor/tree-sitter-go/src/node-types.json"
77+
PHP -> loc "tree-sitter-php/vendor/tree-sitter-php/src/node-types.json"
78+
Python -> loc "tree-sitter-python/vendor/tree-sitter-python/src/node-types.json"
79+
Ruby -> loc "tree-sitter-ruby/vendor/tree-sitter-ruby/src/node-types.json"
80+
TypeScript -> loc "tree-sitter-typescript/vendor/tree-sitter-typescript/typescript/src/node-types.json"
81+
TSX -> loc "tree-sitter-tsx/vendor/tree-sitter-typescript/tsx/src/node-types.json"
82+
JavaScript -> loc "tree-sitter-typescript/vendor/tree-sitter-typescript/typescript/src/node-types.json"
83+
JSX -> loc "tree-sitter-typescript/vendor/tree-sitter-typescript/src/tsx/node-types.json"
84+
Java -> loc "tree-sitter-java/vendor/tree-sitter-java/src/node-types.json"
85+
other -> error ("Couldn't find path for " <> show other)
86+
87+
targetForLanguage :: Language -> FilePath
88+
targetForLanguage x =
89+
let go lc = printf "semantic-%s/src/Language/%s/AST.hs" (lc :: String) (show x)
90+
in case x of
91+
CodeQL -> go "codeql"
92+
Go -> go "go"
93+
PHP -> go "php"
94+
Python -> go "python"
95+
Ruby -> go "ruby"
96+
TypeScript -> go "typescript"
97+
TSX -> go "tsx"
98+
JavaScript -> go "javascript"
99+
Java -> go "java"
100+
other -> error ("Couldn't find path for " <> show other)
101+
68102
parserForLanguage :: Language -> Ptr TreeSitter.Language.Language
69103
parserForLanguage = \case
70104
Unknown -> error "Unknown language encountered"
@@ -87,11 +121,13 @@ parserForLanguage = \case
87121
-- CodeQL -> r
88122

89123
validLanguages :: [Language]
90-
validLanguages = [CodeQL, Go, Java, JavaScript, JSON, JSX, PHP, Python, Ruby, TypeScript, TSX]
124+
validLanguages = [CodeQL, Go, Java, PHP, Python, Ruby, TypeScript, TSX]
91125

92126
emit :: FilePath -> Language -> IO ()
93-
emit path lang = do
127+
emit root lang = do
128+
rf <- Bazel.create
94129
let language = languageToText lang
130+
let path = pathForLanguage rf lang
95131
decls <- T.pack . pprint . fmap adjust <$> astDeclarationsIO (parserForLanguage lang) path
96132

97133
let programText =
@@ -151,14 +187,14 @@ $decls
151187
T.hPutStrLn tf programText
152188
hClose tf
153189
callProcess "ormolu" ["--mode", "inplace", path]
154-
T.readFile path >>= T.putStrLn
190+
callProcess "cp" [path, root </> targetForLanguage lang]
155191

156192
main :: IO ()
157193
main = do
158-
Config language path _root <- Opt.getRecord "generate-ast"
194+
Config language root <- Opt.getRecord "generate-ast"
159195
if language == "all"
160-
then traverse_ (emit path) validLanguages
196+
then traverse_ (emit root) validLanguages
161197
else do
162198
let lang = textToLanguage language
163199
when (lang == Unknown) (die ("Couldn't determine language for " <> T.unpack language))
164-
emit path lang
200+
emit root lang

0 commit comments

Comments
 (0)