on master help sign in
Filter out kernels when figuring out available imports
2f44d9fEvan Czaplicki
compiler/src/Canonicalize/Environment/Foreign.hs+24−1
@@ -18,6 +18,7 @@ import qualified AST.Source as Src
18import qualified Canonicalize.Environment as Env
18import qualified Canonicalize.Environment as Env
19import qualified Elm.Interface as I
19import qualified Elm.Interface as I
20import qualified Elm.ModuleName as ModuleName
20import qualified Elm.ModuleName as ModuleName
21+import qualified Elm.Package as Pkg
21import qualified Reporting.Annotation as A
22import qualified Reporting.Annotation as A
22import qualified Reporting.Error.Canonicalize as Error
23import qualified Reporting.Error.Canonicalize as Error
23import qualified Reporting.Result as Result
24import qualified Reporting.Result as Result
@@ -33,7 +34,7 @@ type Result i w a =
33
34
34createInitialEnv :: ModuleName.Canonical -> Map.Map ModuleName.Raw I.Interface -> [Src.Import] -> Result i w Env.Env
35createInitialEnv :: ModuleName.Canonical -> Map.Map ModuleName.Raw I.Interface -> [Src.Import] -> Result i w Env.Env
35createInitialEnv home ifaces imports =
36createInitialEnv home ifaces imports =
36− do (State vs ts cs bs qvs qts qcs) <- foldM (addImport ifaces) emptyState imports
37+ do (State vs ts cs bs qvs qts qcs) <- foldM (addImport ifaces) emptyState (toSafeImports home imports)
37 Result.ok (Env.Env home (Map.map Env.Foreign vs) ts cs bs qvs qts qcs)
38 Result.ok (Env.Env home (Map.map Env.Foreign vs) ts cs bs qvs qts qcs)
38
39
39
40
@@ -64,6 +65,28 @@ emptyTypes =
64
65
65
66
66
67
68+-- TO SAFE IMPORTS
69+
70+
71+toSafeImports :: ModuleName.Canonical -> [Src.Import] -> [Src.Import]
72+toSafeImports (ModuleName.Canonical pkg _) imports =
73+ if Pkg.isKernel pkg
74+ then filter isNormal imports
75+ else imports
76+
77+
78+isNormal :: Src.Import -> Bool
79+isNormal (Src.Import (A.At _ name) maybeAlias _) =
80+ if Name.isKernel name
81+ then
82+ case maybeAlias of
83+ Nothing -> False
84+ Just _ -> error "kernel imports cannot use `as`"
85+ else
86+ True
87+
88+
89+
67-- ADD IMPORTS
90-- ADD IMPORTS
68
91
69
92