fortran-src-extras 0.2.0 → 0.3.0
raw patch · 6 files changed
+30/−85 lines, 6 filesdep +eitherdep ~fortran-srcPVP ok
version bump matches the API change (PVP)
Dependencies added: either
Dependency ranges changed: fortran-src
API changes (from Hackage documentation)
- Language.Fortran.Extras.ModFiles: decodeModFiles :: [FilePath] -> IO ModFiles
- Language.Fortran.Extras.ModFiles: isModFile :: String -> Bool
Files
- CHANGELOG.md +6/−0
- fortran-src-extras.cabal +5/−4
- src/Language/Fortran/Extras.hs +2/−3
- src/Language/Fortran/Extras/Analysis.hs +1/−1
- src/Language/Fortran/Extras/ModFiles.hs +0/−50
- src/Language/Fortran/Extras/ProgramFile.hs +16/−27
CHANGELOG.md view
@@ -1,3 +1,9 @@+## 0.3.0 (2022-02-15)+ * Update to fortran-src 0.9.0+ * Remove `Language.Fortran.Extras.ModFiles`. The functions are available+ in fortran-src 0.9.0. `decodeModFiles` is renamed to+ `Language.Fortran.Util.ModFile.decodeModFiles'`.+ ## 0.2.0 (2021-06-30) * Minor changes to the documentation * Minor changes to provided `withProgramAnalysis` interface to include verbose mode
fortran-src-extras.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: fortran-src-extras-version: 0.2.0+version: 0.3.0 synopsis: Common functions and utils for fortran-src. description: Various utility functions and orphan instances which may be useful when using fortran-src. category: Language@@ -28,7 +28,6 @@ Language.Fortran.Extras Language.Fortran.Extras.Analysis Language.Fortran.Extras.Encoding- Language.Fortran.Extras.ModFiles Language.Fortran.Extras.ProgramFile Language.Fortran.Extras.RunOptions Language.Fortran.Extras.Test@@ -44,8 +43,9 @@ , bytestring >=0.10.8.1 , containers >=0.5.0.0 , directory >=1.3.0.2+ , either >=5.0.0 && <5.1 , filepath >=1.4.1.2- , fortran-src >=0.5.0+ , fortran-src >=0.9.0 , optparse-applicative >=0.14 , text >=1.2.2.2 , uniplate >=1.6.10@@ -65,7 +65,8 @@ hspec-discover:hspec-discover build-depends: base >=4.7 && <5- , fortran-src >=0.5.0+ , either >=5.0.0 && <5.1+ , fortran-src >=0.9.0 , fortran-src-extras , hspec >=2.2 && <3 , silently ==1.2.*
src/Language/Fortran/Extras.hs view
@@ -32,8 +32,7 @@ as P import qualified Language.Fortran.Extras.Analysis as A-import Language.Fortran.Extras.ModFiles- ( decodeModFiles )+import Language.Fortran.Util.ModFile ( decodeModFiles' ) import Language.Fortran.Extras.RunOptions ( unwrapFortranSrcOptions , getFortranSrcRunOptions@@ -98,7 +97,7 @@ _ -> if null pfIncludes then return $ A.versionedProgramAnalysis fVersion pfPath pfContents else do- pfMods <- decodeModFiles pfIncludes+ pfMods <- decodeModFiles' pfIncludes return $ A.versionedProgramAnalysisWithMods fVersion pfMods pfPath
src/Language/Fortran/Extras/Analysis.hs view
@@ -1,5 +1,5 @@ -- | This module exposes functions obtaining both explicitly versioned--- and implicitly versionied analyses of source code.+-- and implicitly versioned analyses of source code. module Language.Fortran.Extras.Analysis ( versionedExpandedProgramAnalysis , versionedProgramAnalysis
− src/Language/Fortran/Extras/ModFiles.hs
@@ -1,50 +0,0 @@--- | This module provides functions for handling FORTRAN source modules.-module Language.Fortran.Extras.ModFiles- ( isModFile- , decodeModFiles- )-where--import Control.Monad ( foldM- , forM- )-import Data.Binary ( decodeFileOrFail )-import Language.Fortran.Util.ModFile ( emptyModFile- , emptyModFiles- , ModFiles- , modFileSuffix- )-import Language.Fortran.Util.Files ( rGetDirContents )-import System.FilePath ( takeExtension- , (</>)- )---- | Return TRUE iff the file extension indicates a module file.-isModFile :: String -> Bool-isModFile = (== modFileSuffix) . takeExtension---- | Read suspected module files from a list of files and obtain the--- 'Language.Fortran.Util.ModFiles' object populated by their contents.------ TODO: almost equal to Language.Fortran.Analysis.ModGraph.decodeModFiles-decodeModFiles :: [FilePath] -> IO ModFiles-decodeModFiles = foldM- (\modFiles d -> do- modFileNames <- filter isModFile `fmap` rGetDirContents d- addedModFiles <- forM modFileNames $ \modFileName -> do- eResult <- decodeFileOrFail (d </> modFileName)- case eResult of- Left (offset, msg) -> do- putStrLn- $ modFileName- ++ ": Error at offset "- ++ show offset- ++ ": "- ++ msg- return emptyModFile- Right modFile -> do- putStrLn $ modFileName ++ ": successfully parsed precompiled file."- return modFile- return $ addedModFiles ++ modFiles- )- emptyModFiles
src/Language/Fortran/Extras/ProgramFile.hs view
@@ -2,21 +2,16 @@ -- 'Language.Fortran.AST.ProgramFile' from a valid file name. module Language.Fortran.Extras.ProgramFile where -import qualified Data.ByteString.Char8 as B-import Language.Fortran.AST ( A0- , ProgramFile- )-import Language.Fortran.Version ( deduceFortranVersion- , FortranVersion(..)- )-import Language.Fortran.Parser.Any ( parserVersions- )-import Language.Fortran.ParserMonad ( fromParseResult- , fromRight- )-import Language.Fortran.Parser.Fortran77- ( legacy77ParserWithIncludes )-import System.FilePath ( takeDirectory )+import qualified Data.ByteString.Char8 as B+import Language.Fortran.AST ( A0+ , ProgramFile+ )+import Language.Fortran.Version ( deduceFortranVersion+ , FortranVersion(..)+ )+import qualified Language.Fortran.Parser as Parser+import System.FilePath ( takeDirectory )+import Data.Either.Combinators ( fromRight' ) -- | Obtain a 'ProgramFile' from a specific version of the parser with include -- statements expanded.@@ -24,22 +19,16 @@ -- TODO: cover all FortranVersions, instead of just Fortran77Legacy versionedExpandedProgramFile :: FortranVersion -> [String] -> String -> B.ByteString -> IO (ProgramFile A0)-versionedExpandedProgramFile version importDirs path contents = case version of- Fortran77Legacy ->- let parserF b s =- fromRight- . fromParseResult- <$> legacy77ParserWithIncludes (takeDirectory path : importDirs) b s- in parserF contents path- _ -> error ("Unsupported version: " ++ show version)+versionedExpandedProgramFile v importDirs path contents =+ case v of+ Fortran77Legacy ->+ Parser.f77lIncludes (takeDirectory path : importDirs) [] path contents+ _ -> error $ "Unsupported version: " ++ show v -- | Obtain a 'ProgramFile' from a specific version of the parser. versionedProgramFile :: FortranVersion -> String -> B.ByteString -> ProgramFile A0-versionedProgramFile version path contents =- let parserF = parserVersions version- pf = fromRight $ parserF contents path -- Parse contents of file- in pf+versionedProgramFile v p c = fromRight' $ (Parser.byVer v) p c -- | Obtain a 'ProgramFile' from a parser version deduced by inspection -- of the file extension.