@@ -35,20 +35,21 @@ data PrintModuleEnv m ann = PrintModuleEnv
3535 Map
3636 R. QTraitName
3737 ( PC. ModuleName ->
38+ R. PkgMap ->
3839 PC. TyDefs ->
3940 (Doc ann -> Doc ann ) ->
4041 PC. Ty ->
4142 m (Doc ann )
4243 )
43- , env'printTyDef :: MonadPrint m => PC. TyDef -> m (Doc ann )
44+ , env'printTyDef :: MonadPrint m => R. PkgMap -> PC. TyDef -> m (Doc ann )
4445 , env'compilationCfgs :: [Text ]
4546 }
4647
47- printModule :: MonadPrint m => PrintModuleEnv m ann -> m (Doc ann , Set Text )
48- printModule env = do
48+ printModule :: MonadPrint m => PrintModuleEnv m ann -> R. PkgMap -> m (Doc ann , Set Text )
49+ printModule env pkgs = do
4950 ctx <- ask
50- tyDefDocs <- for (toList $ ctx ^. Print. ctxModule . # typeDefs) (env'printTyDef env)
51- instDocs <- printInstances env
51+ tyDefDocs <- for (toList $ ctx ^. Print. ctxModule . # typeDefs) (env'printTyDef env pkgs )
52+ instDocs <- printInstances env pkgs
5253 st <- get
5354 let modDoc =
5455 align . vsep $
@@ -59,31 +60,32 @@ printModule env = do
5960 , mempty
6061 , vsep ((line <> ) <$> instDocs)
6162 ]
62- ( imports, crateDeps) =
63+ imports =
6364 collectPackageDeps
65+ pkgs
6466 (ctx ^. Print. ctxTyImports)
6567 (ctx ^. Print. ctxOpaqueTyImports <> st ^. Print. stTypeImports)
6668 (ctx ^. Print. ctxClassImports <> st ^. Print. stClassImports)
6769 (ctx ^. Print. ctxRuleImports)
6870 (st ^. Print. stValueImports)
6971
70- return (modDoc, Set. map crateNameToCargoText crateDeps )
72+ return (modDoc, Set. map crateNameToCargoText imports )
7173
72- printInstances :: MonadPrint m => PrintModuleEnv m ann -> m [Doc ann ]
73- printInstances env = do
74+ printInstances :: MonadPrint m => PrintModuleEnv m ann -> R. PkgMap -> m [Doc ann ]
75+ printInstances env pkgs = do
7476 ci <- asks (view Print. ctxCompilerInput)
7577 m <- asks (view Print. ctxModule)
7678 let iTyDefs = PC. indexTyDefs ci
7779 foldrM
7880 ( \ d instDocs -> do
79- instDocs' <- printDerive env iTyDefs d
81+ instDocs' <- printDerive env pkgs iTyDefs d
8082 return $ instDocs' <> instDocs
8183 )
8284 mempty
8385 (toList $ m ^. # derives)
8486
85- printDerive :: MonadPrint m => PrintModuleEnv m ann -> PC. TyDefs -> PC. Derive -> m [Doc ann ]
86- printDerive env iTyDefs d = do
87+ printDerive :: MonadPrint m => PrintModuleEnv m ann -> R. PkgMap -> PC. TyDefs -> PC. Derive -> m [Doc ann ]
88+ printDerive env pkgs iTyDefs d = do
8789 mn <- asks (view $ Print. ctxModule . # moduleName)
8890 let qcn = PC. qualifyClassRef mn (d ^. # constraint . # classRef)
8991 classes <- asks (view $ Print. ctxConfig . C. cfgClasses)
@@ -94,17 +96,17 @@ printDerive env iTyDefs d = do
9496 hsqcns
9597 ( \ hsqcn -> do
9698 Print. importClass hsqcn
97- printRsQTraitImpl env mn iTyDefs hsqcn d
99+ printRsQTraitImpl env mn pkgs iTyDefs hsqcn d
98100 )
99101
100- printRsQTraitImpl :: MonadPrint m => PrintModuleEnv m ann -> PC. ModuleName -> PC. TyDefs -> R. QTraitName -> PC. Derive -> m (Doc ann )
101- printRsQTraitImpl env mn iTyDefs hqcn d =
102+ printRsQTraitImpl :: MonadPrint m => PrintModuleEnv m ann -> PC. ModuleName -> R. PkgMap -> PC. TyDefs -> R. QTraitName -> PC. Derive -> m (Doc ann )
103+ printRsQTraitImpl env mn pkgs iTyDefs hqcn d =
102104 case Map. lookup hqcn (env'implementationPrinter env) of
103105 Nothing -> throwInternalError (d ^. # constraint . # sourceInfo) (" Missing capability to print the Rust trait " <> show hqcn) -- TODO(bladyjoker): Fix hqcn printing
104106 Just implPrinter -> do
105107 let ty = d ^. # constraint . # argument
106- mkInstanceDoc = printInstanceDef hqcn ty
107- implPrinter mn iTyDefs mkInstanceDoc ty
108+ mkInstanceDoc = printInstanceDef pkgs hqcn ty
109+ implPrinter mn pkgs iTyDefs mkInstanceDoc ty
108110
109111printCompilationCfgs :: Pretty a => [a ] -> Doc ann
110112printCompilationCfgs [] = mempty
@@ -120,24 +122,18 @@ printImports crates =
120122 externCrate :: R. CrateName -> Doc ann
121123 externCrate crateName = " extern crate" <+> pretty (crateNameToText crateName) <> semi
122124
123- {- | `collectPackageDeps lbTyImports rsTyImports traitImps ruleImps valImps` collects all the package dependencies.
124-
125- Note that LB `lbTyImports` and `ruleImps` are wired by the user (as the user decides on the package name for their schemass), so the imports inside the modules
126- is different from the crate list in `build.js`. These are returned as a tuple as `(imports, buildDeps)`
127- -}
128- collectPackageDeps :: Set PC. QTyName -> Set R. QTyName -> Set R. QTraitName -> Set (PC. InfoLess PC. ModuleName ) -> Set R. QValName -> (Set R. CrateName , Set R. CrateName )
129- collectPackageDeps lbTyImports rsTyImports traitImps ruleImps valImps =
130- let buildDeps =
131- Set. singleton (R. MkCrateName " std" )
132- `Set.union` Set. fromList (mapMaybe R. qualifiedToCrate $ toList rsTyImports)
133- `Set.union` Set. fromList (mapMaybe R. qualifiedToCrate $ toList traitImps)
134- `Set.union` Set. fromList (mapMaybe R. qualifiedToCrate $ toList valImps)
135-
136- imports =
137- Set. fromList [R. crateFromLbModuleName $ withInfo mn | (mn, _tn) <- toList lbTyImports]
138- `Set.union` Set. fromList [R. crateFromLbModuleName $ withInfo mn | mn <- toList ruleImps]
139- `Set.union` buildDeps
140- in (imports, buildDeps)
125+ -- | `collectPackageDeps lbTyImports rsTyImports traitImps ruleImps valImps` collects all the package dependencies.
126+ collectPackageDeps :: R. PkgMap -> Set PC. QTyName -> Set R. QTyName -> Set R. QTraitName -> Set (PC. InfoLess PC. ModuleName ) -> Set R. QValName -> Set R. CrateName
127+ collectPackageDeps packages lbTyImports rsTyImports traitImps ruleImps valImps =
128+ Set. filter
129+ (/= R. MkCrateName " crate" )
130+ ( Set. singleton (R. MkCrateName " std" )
131+ `Set.union` Set. fromList [R. crateFromLbModuleName packages $ withInfo mn | (mn, _tn) <- toList lbTyImports]
132+ `Set.union` Set. fromList (mapMaybe R. qualifiedToCrate $ toList rsTyImports)
133+ `Set.union` Set. fromList (mapMaybe R. qualifiedToCrate $ toList traitImps)
134+ `Set.union` Set. fromList [R. crateFromLbModuleName packages $ withInfo mn | mn <- toList ruleImps]
135+ `Set.union` Set. fromList (mapMaybe R. qualifiedToCrate $ toList valImps)
136+ )
141137
142138withInfo :: PC. InfoLessC b => PC. InfoLess b -> b
143139withInfo x = PC. withInfoLess x id
0 commit comments