haskell-src-exts 1.18.1 → 1.18.2
raw patch · 8 files changed
+319/−4 lines, 8 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG +5/−0
- haskell-src-exts.cabal +1/−1
- src/Language/Haskell/Exts/InternalLexer.hs +11/−3
- tests/examples/AtOperator.hs +8/−0
- tests/examples/AtOperator.hs.exactprinter.golden +1/−0
- tests/examples/AtOperator.hs.parser.golden +286/−0
- tests/examples/AtOperator.hs.prettyparser.golden +1/−0
- tests/examples/AtOperator.hs.prettyprinter.golden +6/−0
CHANGELOG view
@@ -1,3 +1,8 @@+1.18.1 --> 1.18.2+===================++* Fix overzealous lexing of type applications+ 1.18.0 --> 1.18.1 ===================
haskell-src-exts.cabal view
@@ -1,5 +1,5 @@ Name: haskell-src-exts-Version: 1.18.1+Version: 1.18.2 License: BSD3 License-File: LICENSE Build-Type: Simple
src/Language/Haskell/Exts/InternalLexer.hs view
@@ -351,6 +351,12 @@ isPragmaChar c = isAlphaNum c || c == '_' +-- Used in the lexing of type applications+-- Why is it like this? I don't know exactly but this is how it is in+-- GHC's parser.+isOpSymbol :: Char -> Bool+isOpSymbol c = c `elem` "!#$%&*+./<=>?@\\^|-~"+ -- | Checks whether the character would be legal in some position of a qvar. -- Means that '..' and "AAA" will pass the test. isPossiblyQvar :: Char -> Bool@@ -740,9 +746,11 @@ -- Lexed seperately to deal with visible type applciation - '@':_ | TypeApplications `elem` exts -> do- c <- getLastChar- if isIdent c+ '@':c:_ | TypeApplications `elem` exts+ -- Operator starting with an '@'+ && not (isOpSymbol c) -> do+ lc <- getLastChar+ if isIdent lc then discard 1 >> return At else discard 1 >> return TApp
+ tests/examples/AtOperator.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeOperators #-}++data a :+: b = Proxy++foo = id @(Int :+: Int)++_ @> m = m
+ tests/examples/AtOperator.hs.exactprinter.golden view
@@ -0,0 +1,1 @@+Match
+ tests/examples/AtOperator.hs.parser.golden view
@@ -0,0 +1,286 @@+ParseOk+ ( Module+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 1 1 9 1+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 1 1 1 1+ , SrcSpan "tests/examples/AtOperator.hs" 2 1 2 1+ , SrcSpan "tests/examples/AtOperator.hs" 4 1 4 1+ , SrcSpan "tests/examples/AtOperator.hs" 4 1 4 1+ , SrcSpan "tests/examples/AtOperator.hs" 4 1 4 1+ , SrcSpan "tests/examples/AtOperator.hs" 6 1 6 1+ , SrcSpan "tests/examples/AtOperator.hs" 8 1 8 1+ , SrcSpan "tests/examples/AtOperator.hs" 9 1 9 1+ , SrcSpan "tests/examples/AtOperator.hs" 9 1 9 1+ ]+ }+ Nothing+ [ LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 1 1 1 34+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 1 1 1 13+ , SrcSpan "tests/examples/AtOperator.hs" 1 31 1 34+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 1 14 1 30+ , srcInfoPoints = []+ }+ "TypeApplications"+ ]+ , LanguagePragma+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 2 1 2 31+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 2 1 2 13+ , SrcSpan "tests/examples/AtOperator.hs" 2 28 2 31+ ]+ }+ [ Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 2 14 2 27+ , srcInfoPoints = []+ }+ "TypeOperators"+ ]+ ]+ []+ [ DataDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 1 4 21+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 4 14 4 15 ]+ }+ (DataType+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 1 4 5+ , srcInfoPoints = []+ })+ Nothing+ (DHApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 6 4 13+ , srcInfoPoints = []+ }+ (DHInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 6 4 13+ , srcInfoPoints = []+ }+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 6 4 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 6 4 7+ , srcInfoPoints = []+ }+ "a"))+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 8 4 11+ , srcInfoPoints = []+ }+ ":+:"))+ (UnkindedVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 12 4 13+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 12 4 13+ , srcInfoPoints = []+ }+ "b")))+ [ QualConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 16 4 21+ , srcInfoPoints = []+ }+ Nothing+ Nothing+ (ConDecl+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 16 4 21+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 4 16 4 21+ , srcInfoPoints = []+ }+ "Proxy")+ [])+ ]+ Nothing+ , PatBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 1 6 24+ , srcInfoPoints = []+ }+ (PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 1 6 4+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 1 6 4+ , srcInfoPoints = []+ }+ "foo"))+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 5 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 6 5 6 6 ]+ }+ (App+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 7 6 24+ , srcInfoPoints = []+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 7 6 9+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 7 6 9+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 7 6 9+ , srcInfoPoints = []+ }+ "id")))+ (TypeApp+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 10 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 6 10 6 11 ]+ }+ (TyParen+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 11 6 24+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 6 11 6 12+ , SrcSpan "tests/examples/AtOperator.hs" 6 23 6 24+ ]+ }+ (TyInfix+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 12 6 23+ , srcInfoPoints = []+ }+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 12 6 15+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 12 6 15+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 12 6 15+ , srcInfoPoints = []+ }+ "Int")))+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 16 6 19+ , srcInfoPoints = []+ }+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 16 6 19+ , srcInfoPoints = []+ }+ ":+:"))+ (TyCon+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 20 6 23+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 20 6 23+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 6 20 6 23+ , srcInfoPoints = []+ }+ "Int"))))))))+ Nothing+ , FunBind+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 1 8 11+ , srcInfoPoints = []+ }+ [ InfixMatch+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 1 8 11+ , srcInfoPoints = []+ }+ (PWildCard+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 1 8 2+ , srcInfoPoints = []+ })+ (Symbol+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 3 8 5+ , srcInfoPoints = []+ }+ "@>")+ [ PVar+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 6 8 7+ , srcInfoPoints = []+ }+ "m")+ ]+ (UnGuardedRhs+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 8 8 11+ , srcInfoPoints =+ [ SrcSpan "tests/examples/AtOperator.hs" 8 8 8 9 ]+ }+ (Var+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 10 8 11+ , srcInfoPoints = []+ }+ (UnQual+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 10 8 11+ , srcInfoPoints = []+ }+ (Ident+ SrcSpanInfo+ { srcInfoSpan = SrcSpan "tests/examples/AtOperator.hs" 8 10 8 11+ , srcInfoPoints = []+ }+ "m"))))+ Nothing+ ]+ ]+ , []+ )
+ tests/examples/AtOperator.hs.prettyparser.golden view
@@ -0,0 +1,1 @@+Match
+ tests/examples/AtOperator.hs.prettyprinter.golden view
@@ -0,0 +1,6 @@+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeOperators #-}++data a :+: b = Proxy+foo = id @(Int :+: Int)+_ @> m = m