ghc-lib-parser-ex 8.10.0.21 → 8.10.0.22
raw patch · 6 files changed
+54/−15 lines, 6 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Language.Haskell.GhclibParserEx.GHC.Hs.Expr: isListComp :: HsStmtContext Name -> Bool
+ Language.Haskell.GhclibParserEx.GHC.Hs.Expr: isMonadComp :: HsStmtContext Name -> Bool
Files
- ChangeLog.md +10/−1
- ghc-lib-parser-ex.cabal +2/−2
- src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs +9/−1
- src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs +10/−1
- src/Language/Haskell/GhclibParserEx/GHC/Parser.hs +5/−0
- test/Test.hs +18/−10
ChangeLog.md view
@@ -1,5 +1,14 @@ # Changelog for ghc-lib-parser-ex +## 8.10.0.22 released 2021-08-14+- Update to `ghc-lib-parser-0.20210814`+- Added to `GhclibParserEx.GHC.Hs.Expr`:+ - `isMonadComp`+ - `isListComp`++## 0.20210701 released 2021-07-01+- Update to `ghc-lib-0.20210701`+ ## 8.10.0.21 released 2021-06-07 - Bugfix cabal files @@ -15,7 +24,7 @@ ## 0.20210331 released 2021-02-31 - Update to `ghc-lib-0.20210331`-- Upgrade to `ghc-lib-parser-9.0.1.20210324`+- Update to `ghc-lib-parser-9.0.1.20210324` ## 9.0.0.4 released 2021-03-11 - Bugfix for `GHC.Hs.Dump`
ghc-lib-parser-ex.cabal view
@@ -1,6 +1,6 @@-cabal-version: >= 1.18+cabal-version: 1.18 name: ghc-lib-parser-ex-version: 8.10.0.21+version: 8.10.0.22 description: Please see the README on GitHub at <https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme> homepage: https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme bug-reports: https://github.com/shayne-fletcher/ghc-lib-parser-ex/issues
src/Language/Haskell/GhclibParserEx/GHC/Driver/Session.hs view
@@ -44,6 +44,9 @@ instance Ord Extension where compare = compare `on` fromEnum #endif+#if defined (GHCLIB_API_HEAD)+import GHC.Driver.Config.Parser+#endif -- | Parse a GHC extension. readExtension :: String -> Maybe Extension@@ -158,7 +161,12 @@ -> IO (Either String DynFlags) parsePragmasIntoDynFlags flags (enable, disable) file str = catchErrors $ do- let opts = getOptions flags (stringToStringBuffer str) file+ let opts =+#if defined (GHCLIB_API_HEAD)+ getOptions (initParserOpts flags) (stringToStringBuffer str) file+#else+ getOptions flags (stringToStringBuffer str) file+#endif -- Important : apply enables, disables *before* parsing dynamic -- file pragmas. let flags' = foldl' xopt_set flags enable
src/Language/Haskell/GhclibParserEx/GHC/Hs/Expr.hs view
@@ -9,7 +9,7 @@ isTag, isDol, isDot, isReturn, isSection, isRecConstr, isRecUpdate, isVar, isPar, isApp, isOpApp, isAnyApp, isLexeme, isLambda, isQuasiQuote, isDotApp, isTypeApp, isWHNF, isLCase,- isFieldPun, isFieldPunUpdate, isRecStmt, isParComp, isMDo, isTupleSection, isString, isPrimLiteral,+ isFieldPun, isFieldPunUpdate, isRecStmt, isParComp, isMDo, isListComp, isMonadComp, isTupleSection, isString, isPrimLiteral, isSpliceDecl, isFieldWildcard, isUnboxed, isWholeFrac, isStrictMatch, isMultiIf, isProc, isTransStmt, hasFieldsDotDot, varToStr, strToVar,@@ -117,12 +117,21 @@ isParComp :: StmtLR GhcPs GhcPs (LHsExpr GhcPs) -> Bool isParComp = \case ParStmt{} -> True; _ -> False +-- TODO: Seems `HsStmtContext (HsDoRn p)` on master right now. #if defined (GHCLIB_API_HEAD) || defined(GHCLIB_API_902) || defined (GHCLIB_API_900) isMDo :: HsStmtContext GhcRn -> Bool isMDo = \case MDoExpr _ -> True; _ -> False+isMonadComp :: HsStmtContext GhcRn -> Bool+isMonadComp = \case MonadComp -> True; _ -> False+isListComp :: HsStmtContext GhcRn -> Bool+isListComp = \case ListComp -> True; _ -> False #else isMDo :: HsStmtContext Name -> Bool isMDo = \case MDoExpr -> True; _ -> False+isMonadComp :: HsStmtContext Name -> Bool+isMonadComp = \case MonadComp -> True; _ -> False+isListComp :: HsStmtContext Name -> Bool+isListComp = \case ListComp -> True; _ -> False #endif isTupleSection :: HsTupArg GhcPs -> Bool
src/Language/Haskell/GhclibParserEx/GHC/Parser.hs view
@@ -28,7 +28,12 @@ import HsSyn #endif #if defined (GHCLIB_API_HEAD) || defined(GHCLIB_API_902)+# if defined (GHCLIB_API_902) import GHC.Driver.Config+# endif+# if defined (GHCLIB_API_HEAD)+import GHC.Driver.Config.Parser+# endif #endif #if defined (GHCLIB_API_HEAD) || defined(GHCLIB_API_902) || defined (GHCLIB_API_900) import GHC.Parser.PostProcess
test/Test.hs view
@@ -353,7 +353,13 @@ , testCase "isQuasiQuote" $ test "[expr(1 + 2)]" $ assert' . not . isQuasiQuote , testCase "isWholeFrac" $ test "3.2e1" $ assert' . isWholeFrac . unLoc , testCase "isWholeFrac" $ test "3.22e1" $ assert' . not . isWholeFrac . unLoc- , testCase "isMDo" $ test "mdo { pure () }" $ assert' . any isMDo . universeBi+ , testCase "isMDo" $ test_with_exts [ RecursiveDo ] "mdo { pure () }" $ assert' . any isMDo . universeBi+ , testCase "isListComp (1)" $ test "[ x + y | x <- xs, y <- ys ]" $ assert' . any isListComp . universeBi+ , testCase "isListComp (2)" $ test_with_exts [ MonadComprehensions ] "[ x + y | x <- xs, y <- ys ]" $ assert' . any isMonadComp . universeBi+ , testCase "isMonadComp (0)" $ test_with_exts [ MonadComprehensions ] "[ x + y | x <- Just 1, y <- Just 2 ]" $ assert' . not . any isListComp . universeBi+ , testCase "isMonadComp (1)" $ test_with_exts [ MonadComprehensions ] "[ x + y | x <- Just 1, y <- Just 2 ]" $ assert' . any isMonadComp . universeBi+ , testCase "isMonadComp (2)" $ test_with_exts [] "[ x + y | x <- Just 1, y <- Just 2 ]" $ assert' . not . any isMonadComp . universeBi+ , testCase "isMonadComp (3)" $ test_with_exts [] "[ x + y | x <- Just 1, y <- Just 2 ]" $ assert' . any isListComp . universeBi , testCase "strToVar" $ assert' . isVar . strToVar $ "foo" , testCase "varToStr" $ test "[]" $ assert' . (== "[]") . varToStr , testCase "varToStr" $ test "foo" $ assert' . (== "foo") . varToStr@@ -361,15 +367,17 @@ ] where assert' = assertBool ""- test s = exprTest s flags- flags = foldl' xopt_set (defaultDynFlags fakeSettings fakeLlvmConfig)- [ TemplateHaskell- , TemplateHaskellQuotes- , QuasiQuotes- , TypeApplications- , LambdaCase- , RecursiveDo- ]+ test s = exprTest s (flags [])+ test_with_exts exts s = exprTest s (flags exts)+ flags exts = foldl' xopt_set (defaultDynFlags fakeSettings fakeLlvmConfig)+ (exts +++ [ TemplateHaskell+ , TemplateHaskellQuotes+ , QuasiQuotes+ , TypeApplications+ , LambdaCase+ ]+ ) patternPredicateTests :: TestTree patternPredicateTests = testGroup "Pattern predicate tests"