on master help sign in
check for valid path naming conventions in a clearer way
commit417f6156fe35ed797c4c04319fb29fcdb8233062 authorEvan Czaplicki <evancz@users.noreply.github.com> dateSat 29 Jun 2019, 17:07 (7 years ago) parenta8a95b9
1 file changed+15−20
builder/src/Build.hs+15−20
builder/src/Build.hs+15−20
@@ -956,12 +956,12 @@ findLocation :: Env -> FilePath -> IO (Either Exit.BuildProjectProblem Location)
956956findLocation env path =
957957 do exists <- File.exists path
958958 if exists
959− then isInsideSrcDirs env path <$> Dir.canonicalizePath path
959+ then findLoc env path <$> Dir.canonicalizePath path
960960 else return (Left (Exit.BP_PathUnknown path))
961961
962962
963−isInsideSrcDirs :: Env -> FilePath -> FilePath -> Either Exit.BuildProjectProblem Location
964−isInsideSrcDirs (Env _ root _ srcDirs _ _) path absolutePath =
963+findLoc :: Env -> FilePath -> FilePath -> Either Exit.BuildProjectProblem Location
964+findLoc (Env _ root _ srcDirs _ _) path absolutePath =
965965 let
966966 (dirs, file) = FP.splitFileName absolutePath
967967 (final, ext) = break (=='.') file
@@ -978,28 +978,23 @@ isInsideSrcDirs (Env _ root _ srcDirs _ _) path absolutePath =
978978 Right (Location absolutePath path (LOutside path))
979979
980980 Just relativeSegments ->
981− let
982− (exits, maybes) =
983− Either.partitionEithers (map (isInsideSrcDirsHelp relativeSegments) srcDirs)
984− in
985− -- TODO make sure this is all correct
986− case (exits, Maybe.catMaybes maybes) of
987− (_, [(_,name)]) -> Right (Location absolutePath path (LInside name))
988− ([], []) -> Right (Location absolutePath path (LOutside path))
989− (_, (s1,_):(s2,_):_) -> Left (Exit.BP_WithAmbiguousSrcDir path s1 s2)
990− (exit:_, _) -> Left exit
991−
992−
993−isInsideSrcDirsHelp :: [String] -> FilePath -> Either Exit.BuildProjectProblem (Maybe (FilePath, ModuleName.Raw))
994−isInsideSrcDirsHelp segments srcDir =
981+ case Maybe.mapMaybe (isInsideSrcDir relativeSegments) srcDirs of
982+ [] -> Right $ Location absolutePath path (LOutside path)
983+ [(_, Right name)] -> Right $ Location absolutePath path (LInside name)
984+ [(s, Left names)] -> Left $ Exit.BP_MainNameInvalid path s names
985+ (s1,_):(s2,_):_ -> Left $ Exit.BP_WithAmbiguousSrcDir path s1 s2
986+
987+
988+isInsideSrcDir :: [String] -> FilePath -> Maybe (FilePath, Either [String] ModuleName.Raw)
989+isInsideSrcDir segments srcDir =
995990 case dropPrefix (FP.splitDirectories srcDir) segments of
996991 Nothing ->
997− Right Nothing
992+ Nothing
998993
999994 Just names ->
1000995 if all isGoodName names
1001− then Right (Just (srcDir, Name.fromChars (List.intercalate "." names)))
1002− else Left (error "Exit.MakeWithInvalidModuleName" srcDir segments)
996+ then Just (srcDir, Right (Name.fromChars (List.intercalate "." names)))
997+ else Just (srcDir, Left names)
1003998
1004999
10051000isGoodName :: [Char] -> Bool