Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ghc-weeder for openSUSE:Factory 
checked in at 2021-09-10 23:40:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-weeder (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-weeder.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-weeder"

Fri Sep 10 23:40:58 2021 rev:8 rq:917355 version:2.2.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-weeder/ghc-weeder.changes    2021-03-10 
08:57:54.650929583 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-weeder.new.1899/ghc-weeder.changes  
2021-09-10 23:41:08.874548955 +0200
@@ -1,0 +2,9 @@
+Sun Aug 29 14:15:15 UTC 2021 - [email protected]
+
+- Update weeder to version 2.2.0.
+  Upstream has edited the change log file since the last release in
+  a non-trivial way, i.e. they did more than just add a new entry
+  at the top. You can review the file at:
+  http://hackage.haskell.org/package/weeder-2.2.0/src/CHANGELOG.md
+
+-------------------------------------------------------------------

Old:
----
  weeder-2.1.3.tar.gz

New:
----
  weeder-2.2.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-weeder.spec ++++++
--- /var/tmp/diff_new_pack.uZiMXm/_old  2021-09-10 23:41:09.378549491 +0200
+++ /var/tmp/diff_new_pack.uZiMXm/_new  2021-09-10 23:41:09.382549495 +0200
@@ -18,7 +18,7 @@
 
 %global pkg_name weeder
 Name:           ghc-%{pkg_name}
-Version:        2.1.3
+Version:        2.2.0
 Release:        0
 Summary:        Detect dead code
 License:        BSD-3-Clause

++++++ weeder-2.1.3.tar.gz -> weeder-2.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/weeder-2.1.3/CHANGELOG.md 
new/weeder-2.2.0/CHANGELOG.md
--- old/weeder-2.1.3/CHANGELOG.md       2001-09-09 03:46:40.000000000 +0200
+++ new/weeder-2.2.0/CHANGELOG.md       2001-09-09 03:46:40.000000000 +0200
@@ -1,5 +1,15 @@
 ## Changelog for Weeder
 
+### [`2.2.0`][v2.2.0] - *2021-08-28*
+
+This will likely be the last Weeder release before GHC 9.
+
+- Allow configuration of the HIE file extension using the `--hie-extension` 
command-line flag
+- Add `--require-hs-files` switch. If supplied, this switch means Weeder will 
only consider `.hie` files where a corresponding `.hs` file can be found. 
([#50](https://github.com/ocharles/weeder/pull/50))
+- Pattern synonyms are now considered 
([#79](https://github.com/ocharles/weeder/pull/79))
+- Weeder's output format is now one-line-per-weed 
([#62](https://github.com/ocharles/weeder/pull/62))
+- `--hie-extension` can be used to change the extension used for `.hie` files 
([#64](https://github.com/ocharles/weeder/pull/64))
+
 ### [`2.1.3`][v2.1.3] - *2020-12-11*
 
 - Support `dhall-1.35`, `dhall-1.36` and `dhall-1.37`.
@@ -187,8 +197,13 @@
 - Initial version
 
 
-[v2.0.1 ]: https://github.com/ocharles/weeder/tree/v2.0.1
-[v2.0.0 ]: https://github.com/ocharles/weeder/tree/v2.0.0
+[v2.2.0 ]: https://github.com/ocharles/weeder/releases/tag/2.2.0
+[v2.1.3 ]: https://github.com/ocharles/weeder/releases/tag/2.1.3
+[v2.1.2 ]: https://github.com/ocharles/weeder/releases/tag/2.1.2
+[v2.1.1 ]: https://github.com/ocharles/weeder/releases/tag/2.1.1
+[v2.1.0 ]: https://github.com/ocharles/weeder/releases/tag/2.1.0
+[v2.0.1 ]: https://github.com/ocharles/weeder/releases/tag/2.0.1
+[v2.0.0 ]: https://github.com/ocharles/weeder/releases/tag/2.0.0
 [v1.0.8 ]: https://github.com/ndmitchell/weeder/tree/v1.0.8
 [v1.0.7 ]: https://github.com/ndmitchell/weeder/tree/v1.0.7
 [v1.0.6 ]: https://github.com/ndmitchell/weeder/tree/v1.0.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/weeder-2.1.3/README.md new/weeder-2.2.0/README.md
--- old/weeder-2.1.3/README.md  2001-09-09 03:46:40.000000000 +0200
+++ new/weeder-2.2.0/README.md  2001-09-09 03:46:40.000000000 +0200
@@ -66,7 +66,7 @@
 `roots` is a list of regular expressions of symbols that are considered as
 alive. If you're building an executable, the pattern `^Main.main$` is a
 good starting point - specifying that `main` is a root. Weeder currently 
doesn't
-add all exported functions a roots automatically but in many cases `main` from 
a
+add all exported functions as roots automatically but in many cases `main` 
from a
 test suite could be a good workaround for that
 
 `type-class-roots` configures whether or not Weeder should consider anything in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/weeder-2.1.3/src/Weeder/Main.hs 
new/weeder-2.2.0/src/Weeder/Main.hs
--- old/weeder-2.1.3/src/Weeder/Main.hs 2001-09-09 03:46:40.000000000 +0200
+++ new/weeder-2.2.0/src/Weeder/Main.hs 2001-09-09 03:46:40.000000000 +0200
@@ -10,17 +10,14 @@
 module Weeder.Main ( main, mainWithConfig ) where
 
 -- base
-import Control.Monad ( guard, unless )
+import Control.Monad ( guard, unless, when )
 import Control.Monad.IO.Class ( liftIO )
 import Data.Bool
 import Data.Foldable
+import Data.List ( isSuffixOf )
 import Data.Version ( showVersion )
-import Text.Printf ( printf )
 import System.Exit ( exitFailure )
 
--- bytestring
-import qualified Data.ByteString.Char8 as BS
-
 -- containers
 import qualified Data.Map.Strict as Map
 import qualified Data.Set as Set
@@ -39,11 +36,11 @@
 
 -- ghc
 import HieBin ( HieFileResult( HieFileResult, hie_file_result ), 
readHieFileWithVersion )
-import HieTypes ( HieFile, hieVersion )
+import HieTypes ( HieFile( hie_hs_file ), hieVersion )
 import Module ( moduleName, moduleNameString )
 import NameCache ( initNameCache, NameCache )
 import OccName ( occNameString )
-import SrcLoc ( realSrcSpanStart, srcLocCol, srcLocLine )
+import SrcLoc ( RealSrcLoc, realSrcSpanStart, srcLocLine )
 import UniqSupply ( mkSplitUniqSupply )
 
 -- regex-tdfa
@@ -64,13 +61,14 @@
 -- | Parse command line arguments and into a 'Config' and run 'mainWithConfig'.
 main :: IO ()
 main = do
-  (configExpr, hieDirectories) <-
+  (configExpr, hieExt, hieDirectories, requireHsFiles) <-
     execParser $
       info (optsP <**> helper <**> versionP) mempty
 
-  Dhall.input config configExpr >>= mainWithConfig hieDirectories
+  Dhall.input config configExpr
+    >>= mainWithConfig hieExt hieDirectories requireHsFiles
   where
-    optsP = (,)
+    optsP = (,,,)
         <$> strOption
             ( long "config"
                 <> help "A Dhall expression for Weeder's configuration. Can 
either be a file path (a Dhall import) or a literal Dhall expression."
@@ -78,31 +76,49 @@
                 <> metavar "<weeder.dhall>"
                 <> showDefaultWith T.unpack
             )
+        <*> strOption
+            ( long "hie-extension"
+                <> value ".hie"
+                <> help "Extension of HIE files"
+                <> showDefault
+            )
         <*> many (
             strOption
                 ( long "hie-directory"
                     <> help "A directory to look for .hie files in. Maybe 
specified multiple times. Default ./."
                 )
             )
-
-    versionP = infoOption (showVersion version)
+        <*> switch
+              ( long "require-hs-files"
+                  <> help "Requries that all .hie files have matching .hs 
files. This can help deal with skipping .hie files for Haskell modules that 
have since been removed"
+              )
+
+    versionP = infoOption ( "weeder version "
+                            <> showVersion version
+                            <> "\nhie version "
+                            <> show hieVersion )
         ( long "version" <> help "Show version" )
 
 
 -- | Run Weeder in the current working directory with a given 'Config'.
 --
--- This will recursively find all @.hie@ files in the current directory, 
perform
+-- This will recursively find all files with the given extension in the given 
directories, perform
 -- analysis, and report all unused definitions according to the 'Config'.
-mainWithConfig :: [FilePath] -> Config -> IO ()
-mainWithConfig hieDirectories Config{ rootPatterns, typeClassRoots } = do
+mainWithConfig :: String -> [FilePath] -> Bool -> Config -> IO ()
+mainWithConfig hieExt hieDirectories requireHsFiles Config{ rootPatterns, 
typeClassRoots } = do
   hieFilePaths <-
     concat <$>
-      traverse getHieFilesIn
+      traverse ( getFilesIn hieExt )
         ( if null hieDirectories
           then ["./."]
           else hieDirectories
         )
 
+  hsFilePaths <-
+    if requireHsFiles
+      then getFilesIn ".hs" "./."
+      else pure []
+
   nameCache <- do
     uniqSupply <- mkSplitUniqSupply 'z'
     return ( initNameCache uniqSupply [] )
@@ -111,7 +127,9 @@
     flip execStateT emptyAnalysis do
       for_ hieFilePaths \hieFilePath -> do
         hieFileResult <- liftIO ( readCompatibleHieFileOrExit nameCache 
hieFilePath )
-        analyseHieFile hieFileResult
+        let hsFileExists = any ( hie_hs_file hieFileResult `isSuffixOf` ) 
hsFilePaths
+        when (requireHsFiles ==> hsFileExists) do
+          analyseHieFile hieFileResult
 
   let
     roots =
@@ -137,60 +155,33 @@
         ( \d ->
             fold $ do
               moduleFilePath <- Map.lookup ( declModule d ) ( modulePaths 
analysis )
-              moduleSource <- Map.lookup ( declModule d ) ( moduleSource 
analysis )
-
               spans <- Map.lookup d ( declarationSites analysis )
               guard $ not $ null spans
-
-              let snippets = do
-                    srcSpan <- Set.toList spans
-
-                    let start = realSrcSpanStart srcSpan
-                    let firstLine = max 0 ( srcLocLine start - 3 )
-
-                    return ( start, take 5 $ drop firstLine $ zip [1..] $ 
BS.lines moduleSource )
-
-              return [ Map.singleton moduleFilePath ( liftA2 (,) snippets 
(pure d) ) ]
+              let starts = map realSrcSpanStart $ Set.toList spans
+              return [ Map.singleton moduleFilePath ( liftA2 (,) starts (pure 
d) ) ]
         )
         dead
 
   for_ ( Map.toList warnings ) \( path, declarations ) ->
-    for_ declarations \( ( start, snippet ), d ) -> do
-      putStrLn $
-        unwords
-          [ foldMap ( <> ":" ) [ path, show ( srcLocLine start ), show ( 
srcLocCol start ) ]
-          , "error:"
-          , occNameString ( declOccName d )
-          , "is unused"
-          ]
-
-      putStrLn ""
-      for_ snippet \( n, line ) ->
-        putStrLn $
-             replicate 4 ' '
-          <> printf "% 4d" ( n :: Int )
-          <> " ??? "
-          <> BS.unpack line
-      putStrLn ""
-
-      putStrLn $
-           replicate 4 ' '
-        <> "Delete this definition or add ???"
-        <> moduleNameString ( moduleName ( declModule d ) )
-        <> "."
-        <> occNameString ( declOccName d )
-        <> "??? as a root to fix this error."
-      putStrLn ""
-      putStrLn ""
-
-  putStrLn $ "Weeds detected: " <> show ( sum ( length <$> warnings ) )
+    for_ declarations \( start, d ) ->
+      putStrLn $ showWeed path start d
 
   unless ( null warnings ) exitFailure
 
+showWeed :: FilePath -> RealSrcLoc -> Declaration -> String
+showWeed path start d =
+  path <> ":" <> show ( srcLocLine start ) <> ": "
+    <> occNameString ( declOccName d)
 
--- | Recursively search for .hie files in given directory
-getHieFilesIn :: FilePath -> IO [FilePath]
-getHieFilesIn path = do
+
+-- | Recursively search for files with the given extension in given directory
+getFilesIn
+  :: String
+  -- ^ Only files with this extension are considered
+  -> FilePath
+  -- ^ Directory to look in
+  -> IO [FilePath]
+getFilesIn ext path = do
   exists <-
     doesPathExist path
 
@@ -199,7 +190,7 @@
       isFile <-
         doesFileExist path
 
-      if isFile && "hie" `isExtensionOf` path
+      if isFile && ext `isExtensionOf` path
         then do
           path' <-
             canonicalizePath path
@@ -215,7 +206,7 @@
               cnts <-
                 listDirectory path
 
-              withCurrentDirectory path ( foldMap getHieFilesIn cnts )
+              withCurrentDirectory path ( foldMap ( getFilesIn ext ) cnts )
 
             else
               return []
@@ -233,7 +224,20 @@
       return hie_file_result
     Left ( v, _ghcVersion ) -> do
       putStrLn $ "incompatible hie file: " <> path
-      putStrLn $ "    expected .hie file version " <> show hieVersion <> " but 
got " <> show v
+      putStrLn $ "    this version of weeder was compiled with GHC version "
+               <> show hieVersion
+      putStrLn $ "    the hie files in this project were generated with GHC 
version "
+               <> show v
       putStrLn $ "    weeder must be built with the same GHC version"
                <> " as the project it is used on"
       exitFailure
+
+
+
+infixr 5 ==>
+
+
+-- | An infix operator for logical implication
+(==>) :: Bool -> Bool -> Bool
+True  ==> x = x
+False ==> _ = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/weeder-2.1.3/src/Weeder.hs 
new/weeder-2.2.0/src/Weeder.hs
--- old/weeder-2.1.3/src/Weeder.hs      2001-09-09 03:46:40.000000000 +0200
+++ new/weeder-2.2.0/src/Weeder.hs      2001-09-09 03:46:40.000000000 +0200
@@ -7,7 +7,6 @@
 {-# language NoImplicitPrelude #-}
 {-# language OverloadedLabels #-}
 {-# language OverloadedStrings #-}
-{-# language PackageImports #-}
 
 module Weeder
   ( -- * Analysis
@@ -38,9 +37,6 @@
 import GHC.Generics ( Generic )
 import Prelude hiding ( span )
 
--- bytestring
-import Data.ByteString ( ByteString )
-
 -- containers
 import Data.Map.Strict ( Map )
 import qualified Data.Map.Strict as Map
@@ -60,7 +56,7 @@
   , DeclType( DataDec, ClassDec, ConDec )
   , HieAST( Node, nodeInfo, nodeChildren, nodeSpan )
   , HieASTs( HieASTs )
-  , HieFile( HieFile, hie_asts, hie_exports, hie_module, hie_hs_file, 
hie_hs_src )
+  , HieFile( HieFile, hie_asts, hie_exports, hie_module, hie_hs_file )
   , IdentifierDetails( IdentifierDetails, identInfo )
   , NodeInfo( NodeInfo, nodeIdentifiers, nodeAnnotations )
   , Scope( ModuleScope )
@@ -139,7 +135,6 @@
       -- ^ All exports for a given module.
     , modulePaths :: Map Module FilePath
       -- ^ A map from modules to the file path to the .hs file defining them.
-    , moduleSource :: Map Module ByteString
     }
   deriving
     ( Generic )
@@ -147,8 +142,7 @@
 
 -- | The empty analysis - the result of analysing zero @.hie@ files.
 emptyAnalysis :: Analysis
-emptyAnalysis =
-  Analysis empty mempty mempty mempty mempty mempty
+emptyAnalysis = Analysis empty mempty mempty mempty mempty
 
 
 -- | A root for reachability analysis.
@@ -181,9 +175,8 @@
 
 -- | Incrementally update 'Analysis' with information in a 'HieFile'.
 analyseHieFile :: MonadState Analysis m => HieFile -> m ()
-analyseHieFile HieFile{ hie_asts = HieASTs hieASTs, hie_exports, hie_module, 
hie_hs_file, hie_hs_src } = do
+analyseHieFile HieFile{ hie_asts = HieASTs hieASTs, hie_exports, hie_module, 
hie_hs_file } = do
   #modulePaths %= Map.insert hie_module hie_hs_file
-  #moduleSource %= Map.insert hie_module hie_hs_src
 
   for_ hieASTs \ast -> do
     addAllDeclarations ast
@@ -253,6 +246,7 @@
           , analyseRewriteRule n
           , analyseClassDeclaration n
           , analyseDataDeclaration n
+          , analysePatternSynonyms n
           ]
       )
 
@@ -274,8 +268,7 @@
   for_ ( findDeclarations n ) \d -> do
     define d nodeSpan
 
-    for_ ( uses n ) \use ->
-      addDependency d use
+    for_ ( uses n ) $ addDependency d
 
 
 analyseRewriteRule :: ( Alternative m, MonadState Analysis m ) => HieAST a -> 
m ()
@@ -296,8 +289,8 @@
 analyseClassDeclaration n@Node{ nodeInfo = NodeInfo{ nodeAnnotations } } = do
   guard ( ( "ClassDecl", "TyClDecl" ) `Set.member` nodeAnnotations )
 
-  for_ ( findIdentifiers isClassDeclaration n ) \d ->
-    for_ ( findIdentifiers ( const True ) n ) ( addDependency d )
+  for_ ( findIdentifiers isClassDeclaration n ) $
+    for_ ( findIdentifiers ( const True ) n ) . addDependency
 
   where
 
@@ -345,6 +338,11 @@
   else
     foldMap constructors nodeChildren
 
+analysePatternSynonyms :: ( Alternative m, MonadState Analysis m ) => HieAST a 
-> m ()
+analysePatternSynonyms n@Node{ nodeInfo = NodeInfo{ nodeAnnotations } } = do
+  guard $ ( "PatSynBind", "HsBindLR" ) `Set.member` nodeAnnotations
+
+  for_ ( findDeclarations n ) $ for_ ( uses n ) . addDependency
 
 findDeclarations :: HieAST a -> Seq Declaration
 findDeclarations =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/weeder-2.1.3/weeder.cabal 
new/weeder-2.2.0/weeder.cabal
--- old/weeder-2.1.3/weeder.cabal       2001-09-09 03:46:40.000000000 +0200
+++ new/weeder-2.2.0/weeder.cabal       2001-09-09 03:46:40.000000000 +0200
@@ -5,7 +5,7 @@
 author:        Ollie Charles <[email protected]>
 maintainer:    Ollie Charles <[email protected]>
 build-type:    Simple
-version:       2.1.3
+version:       2.2.0
 copyright:     Neil Mitchell 2017-2020, Oliver Charles 2020
 synopsis:      Detect dead code
 description:   Find declarations.
@@ -22,17 +22,17 @@
     , base                 ^>= 4.13.0.0 || ^>= 4.14.0.0
     , bytestring           ^>= 0.10.9.0 || ^>= 0.11.0.0
     , containers           ^>= 0.6.2.1
-    , dhall                ^>= 1.30.0 || ^>= 1.31.0 || ^>= 1.32.0 || ^>= 
1.33.0 || ^>= 1.34.0 || ^>= 1.35.0 || ^>= 1.36.0 || ^>= 1.37.0
+    , dhall                ^>= 1.30.0 || ^>= 1.31.0 || ^>= 1.32.0 || ^>= 
1.33.0 || ^>= 1.34.0 || ^>= 1.35.0 || ^>= 1.36.0 || ^>= 1.37.0 || ^>= 1.40.0
     , directory            ^>= 1.3.3.2
     , filepath             ^>= 1.4.2.1
-    , generic-lens         ^>= 1.1.0.0 || ^>= 1.2.0.0 || ^>= 2.0.0.0
+    , generic-lens         ^>= 1.1.0.0 || ^>= 1.2.0.0 || ^>= 2.0.0.0 || ^>= 
2.2.0.0
     , ghc                  ^>= 8.8.1 || ^>= 8.10
-    , lens                 ^>= 4.18.1 || ^>= 4.19
+    , lens                 ^>= 4.18.1 || ^>= 4.19 || ^>= 5.0.1
     , mtl                  ^>= 2.2.2
     , optparse-applicative ^>= 0.14.3.0 || ^>= 0.15.1.0 || ^>= 0.16.0.0
     , regex-tdfa           ^>= 1.2.0.0 || ^>= 1.3.1.0
     , text                 ^>= 1.2.3.0
-    , transformers         ^>= 0.5.6.2
+    , transformers         ^>= 0.5.6.2 || ^>= 0.6
   hs-source-dirs: src
   exposed-modules:
     Weeder
@@ -48,14 +48,14 @@
 
 executable weeder
   build-depends:
-    , base                 ^>= 4.13.0.0 || ^>= 4.14
-    , bytestring           ^>= 0.10.9.0 || ^>= 0.11.0.0
-    , containers           ^>= 0.6.2.1
-    , directory            ^>= 1.3.3.2
-    , filepath             ^>= 1.4.2.1
-    , ghc                  ^>= 8.8.1 || ^>= 8.10
-    , optparse-applicative ^>= 0.14.3.0 || ^>= 0.15.1.0 || ^>= 0.16.0.0
-    , transformers         ^>= 0.5.6.2
+    , base
+    , bytestring
+    , containers
+    , directory
+    , filepath
+    , ghc
+    , optparse-applicative
+    , transformers
     , weeder
   main-is: Main.hs
   hs-source-dirs: exe-weeder

Reply via email to