@@ -34,7 +34,7 @@ import Control.Monad ( when, forM, forM_ )
3434import Data.Typeable ( Typeable )
3535import Data.Monoid ( Endo (.. ) )
3636import Data.Maybe ( fromMaybe )
37- import Data.List ( unfoldr , intercalate )
37+ import Data.List ( unfoldr )
3838import Data.Char ( isAlpha , isAlphaNum , isUpperCase )
3939
4040import System.FilePath ( (</>) , (<.>) , takeBaseName , takeDirectory , takeExtension )
@@ -72,8 +72,8 @@ initCodeBlocks dependenciesOpt = do
7272
7373 -- add hooks for writing out files (and possibly compiling the project)
7474 let finalizer = case dependenciesOpt of
75- Nothing -> fileFinalizer True
76- Just deps -> fileFinalizer False *> cargoFinalizer [] deps
75+ Nothing -> fileFinalizer
76+ Just deps -> fileFinalizer *> cargoFinalizer [] deps
7777 addModFinalizer finalizer
7878
7979 -- add a module state
@@ -159,23 +159,19 @@ cargoFinalizer extraArgs dependencies = do
159159 nameFiles <- filter ((" .ffinames" == ) . takeExtension) <$> runIO (listFilesRecursive srcDir)
160160
161161 let modDir dir = do
162- let parentMod =
163- case takeBaseName dir of
164- " src" -> " "
165- foo -> foo
166162 subdirs <- listDirectories dir
167163 mapM_ modDir subdirs
168164 srcs <- filter (\ file -> takeExtension file == " .rs" && isUpperCase (head $ takeBaseName file)) <$> listFiles dir
169165 let modules = takeBaseName <$> (subdirs <> srcs)
170- writeFile (dir </> " mod.rs" ) . unlines . concat $ [ [" " , " pub mod " <> name <> " ;" , " pub use " <> fullName <> " ::*;" ]
166+ writeFile (dir </> " mod.rs" ) . unlines . concat $ [ [" " , " pub mod " <> name <> " ;" , " pub use self:: " <> name <> " ::*;" ]
171167 | name <- modules
172- , let fullName = intercalate " ::" [parentMod, name]
173168 ]
174169
175170 runIO $ do
176171 modDir srcDir
177- readFile (srcDir </> " mod.rs " ) >>= appendFile (srcDir </> " lib .rs" )
172+ modules <- readFile (srcDir </> " mod .rs" )
178173 removeFile $ srcDir </> " mod.rs"
174+ writeFile (srcDir </> " lib.rs" ) $ " #![allow(warnings)]\n\n " <> modules
179175
180176 names <- runIO $ concat <$> forM nameFiles (fmap lines . readFile )
181177 ffiFakeSig <- [t | IO () |]
@@ -189,6 +185,7 @@ cargoFinalizer extraArgs dependencies = do
189185 cargoSrc = unlines [ " [package]"
190186 , " name = \" " ++ crate ++ " \" "
191187 , " version = \" 0.0.0\" "
188+ , " edition = \" 2021\" "
192189
193190 , " [dependencies]"
194191 , unlines [ name ++ " = \" " ++ version ++ " \" "
@@ -260,13 +257,13 @@ rustcErrMsg = "Rust source file associated with this module failed to compile"
260257-- a module. This emits into a file in the @.inline-rust@ directory all of the
261258-- Rust code we have produced while processing the current files contexts and
262259-- quasiquotes.
263- fileFinalizer :: Bool -> Q ()
264- fileFinalizer submodule = do
260+ fileFinalizer :: Q ()
261+ fileFinalizer = do
265262 (pkg, mods) <- currentFile
266263
267264 let pkgDir = " .inline-rust" </> pkg
268265 srcDir = pkgDir </> " src"
269- thisFile = if submodule then foldr1 (</>) mods else " lib "
266+ thisFile = foldr1 (</>) mods
270267
271268 -- Figure out what we are putting into this file
272269 Just cb <- getQ
0 commit comments