arion 0.1.0.6 → 0.1.0.7
raw patch · 2 files changed
+22/−12 lines, 2 files
Files
- arion.cabal +1/−1
- src/Arion/Utilities.hs +21/−11
arion.cabal view
@@ -1,5 +1,5 @@ name: arion-version: 0.1.0.6+version: 0.1.0.7 synopsis: Watcher and runner for Hspec description: Watcher and runner for Hspec license: MIT
src/Arion/Utilities.hs view
@@ -1,5 +1,6 @@ module Arion.Utilities (- associate+ associate,+ dependencies ) where import Arion.Types@@ -7,15 +8,24 @@ import Data.List (union) associate :: [SourceFile] -> [TestFile] -> Map FilePath [TestFile]-associate sourceFiles testFiles = let preTransitive = map (createAssociations testFiles) sourceFiles- transitive = map (\(sourceFile, testsAssociatedWithSource) -> let imports = importedModules sourceFile- testsAssociatedWithImports =- concatMap snd $ concatMap (\imp -> filter (\(source, tests) -> moduleName source == imp) preTransitive) imports- in (sourceFilePath sourceFile, testsAssociatedWithSource `union` testsAssociatedWithImports)- ) preTransitive- in fromList transitive+associate sourceFiles testFiles = let sourcesAndDependencies = dependencies sourceFiles+ in fromList $ map (\(source, dependencies) ->+ let testFilesFor source = filter (\testFile -> moduleName source `elem` imports testFile) testFiles + testFilesForSource = testFilesFor source+ testFilesForDependencies = concatMap testFilesFor dependencies+ in (sourceFilePath source, testFilesForSource ++ testFilesForDependencies)+ ) sourcesAndDependencies -createAssociations :: [TestFile] -> SourceFile -> (SourceFile, [TestFile])-createAssociations testFiles sourceFile = let associatedTestFiles = filter (\testFile -> moduleName sourceFile `elem` imports testFile) testFiles- in (sourceFile, associatedTestFiles)+dependencies :: [SourceFile] -> [(SourceFile, [SourceFile])]+dependencies [] = []+dependencies sourceFiles = map (\file -> let dependencies = transitiveDependencies sourceFiles (importedModules file)+ in (file, dependencies)+ ) sourceFiles +transitiveDependencies :: [SourceFile] -> [String] -> [SourceFile]+transitiveDependencies sourceFiles [] = []+transitiveDependencies sourceFiles imports = let sourcesForImports = concatMap (findSourcesByModule sourceFiles) imports+ in sourcesForImports ++ concatMap (transitiveDependencies sourceFiles) (map importedModules sourcesForImports)++findSourcesByModule :: [SourceFile] -> String -> [SourceFile]+findSourcesByModule sourceFiles theModuleName = filter (\file -> moduleName file == theModuleName) sourceFiles