language-ocaml 0.1.31 → 0.2.0
raw patch · 136 files changed
+415/−3446 lines, 136 filesdep +directorydep +extradep +filepath
Dependencies added: directory, extra, filepath, tasty-golden
Files
- language-ocaml.cabal +32/−112
- lib/Language/OCaml/Parser.hs +3/−24
- lib/Language/OCaml/Parser/AndTypeDeclaration.hs +0/−29
- lib/Language/OCaml/Parser/AttrId.hs +0/−21
- lib/Language/OCaml/Parser/Attribute.hs +0/−21
- lib/Language/OCaml/Parser/Attributes.hs +0/−13
- lib/Language/OCaml/Parser/BarConstructorDeclaration.hs +0/−27
- lib/Language/OCaml/Parser/Common.hs +0/−8
- lib/Language/OCaml/Parser/Constant.hs +0/−23
- lib/Language/OCaml/Parser/ConstrIdent.hs +0/−18
- lib/Language/OCaml/Parser/ConstrLongident.hs +0/−28
- lib/Language/OCaml/Parser/ConstructorArguments.hs +0/−15
- lib/Language/OCaml/Parser/ConstructorDeclaration.hs +0/−25
- lib/Language/OCaml/Parser/ConstructorDeclarations.hs +0/−23
- lib/Language/OCaml/Parser/CoreType.hs +0/−18
- lib/Language/OCaml/Parser/CoreType2.hs +0/−26
- lib/Language/OCaml/Parser/CoreTypeCommaList.hs +0/−12
- lib/Language/OCaml/Parser/CoreTypeList.hs +0/−21
- lib/Language/OCaml/Parser/CoreTypeNoAttr.hs +0/−15
- lib/Language/OCaml/Parser/Expr.hs +0/−99
- lib/Language/OCaml/Parser/ExprSemiList.hs +0/−18
- lib/Language/OCaml/Parser/FunBinding.hs +0/−22
- lib/Language/OCaml/Parser/FunDef.hs +0/−27
- lib/Language/OCaml/Parser/GeneralizedConstructorArguments.hs +0/−17
- lib/Language/OCaml/Parser/Generator/Lexer.x +11/−2
- lib/Language/OCaml/Parser/Generator/Parser.y +61/−3
- lib/Language/OCaml/Parser/Implementation.hs +0/−13
- lib/Language/OCaml/Parser/Internal.hs +0/−200
- lib/Language/OCaml/Parser/Label.hs +0/−9
- lib/Language/OCaml/Parser/LabelDeclaration.hs +0/−24
- lib/Language/OCaml/Parser/LabelDeclarationSemi.hs +0/−26
- lib/Language/OCaml/Parser/LabelDeclarations.hs +0/−20
- lib/Language/OCaml/Parser/LabelLongident.hs +0/−20
- lib/Language/OCaml/Parser/LabeledSimpleExpr.hs +0/−18
- lib/Language/OCaml/Parser/LabeledSimplePattern.hs +0/−18
- lib/Language/OCaml/Parser/LblExpr.hs +0/−23
- lib/Language/OCaml/Parser/LblExprList.hs +0/−31
- lib/Language/OCaml/Parser/LblPattern.hs +0/−29
- lib/Language/OCaml/Parser/LblPatternList.hs +0/−40
- lib/Language/OCaml/Parser/LetBinding.hs +0/−23
- lib/Language/OCaml/Parser/LetBindingBody.hs +0/−61
- lib/Language/OCaml/Parser/LetBindings.hs +0/−28
- lib/Language/OCaml/Parser/MatchCase.hs +0/−33
- lib/Language/OCaml/Parser/MatchCases.hs +0/−13
- lib/Language/OCaml/Parser/ModExtLongident.hs +0/−21
- lib/Language/OCaml/Parser/ModLongident.hs +0/−11
- lib/Language/OCaml/Parser/ModuleBinding.hs +0/−25
- lib/Language/OCaml/Parser/ModuleBindingBody.hs +0/−18
- lib/Language/OCaml/Parser/ModuleExpr.hs +0/−17
- lib/Language/OCaml/Parser/MutableFlag.hs +0/−15
- lib/Language/OCaml/Parser/NonRecFlag.hs +0/−15
- lib/Language/OCaml/Parser/OpenStatement.hs +0/−37
- lib/Language/OCaml/Parser/Operator.hs +0/−17
- lib/Language/OCaml/Parser/OptBar.hs +0/−14
- lib/Language/OCaml/Parser/OptPatternTypeConstraint.hs +0/−16
- lib/Language/OCaml/Parser/OptSemi.hs +0/−14
- lib/Language/OCaml/Parser/OptTypeConstraint.hs +0/−15
- lib/Language/OCaml/Parser/OptionalTypeParameter.hs +0/−15
- lib/Language/OCaml/Parser/OptionalTypeParameters.hs +0/−18
- lib/Language/OCaml/Parser/OptionalTypeVariable.hs +0/−12
- lib/Language/OCaml/Parser/OverrideFlag.hs +0/−15
- lib/Language/OCaml/Parser/Pattern.hs +0/−40
- lib/Language/OCaml/Parser/PatternGen.hs +0/−22
- lib/Language/OCaml/Parser/PatternNoExn.hs +0/−34
- lib/Language/OCaml/Parser/PatternSemiList.hs +0/−18
- lib/Language/OCaml/Parser/Payload.hs +0/−13
- lib/Language/OCaml/Parser/PolyTypeNoAttr.hs +0/−16
- lib/Language/OCaml/Parser/PostItemAttribute.hs +0/−20
- lib/Language/OCaml/Parser/PostItemAttributes.hs +0/−13
- lib/Language/OCaml/Parser/PrivateFlag.hs +0/−15
- lib/Language/OCaml/Parser/RecFlag.hs +0/−15
- lib/Language/OCaml/Parser/RecordExpr.hs +0/−28
- lib/Language/OCaml/Parser/SeqExpr.hs +0/−30
- lib/Language/OCaml/Parser/SigExceptionDeclaration.hs +0/−39
- lib/Language/OCaml/Parser/SimpleCoreType.hs +0/−21
- lib/Language/OCaml/Parser/SimpleCoreType2.hs +0/−38
- lib/Language/OCaml/Parser/SimpleCoreTypeOrTuple.hs +0/−26
- lib/Language/OCaml/Parser/SimpleDelimitedPattern.hs +0/−45
- lib/Language/OCaml/Parser/SimpleExpr.hs +0/−50
- lib/Language/OCaml/Parser/SimpleLabeledExprList.hs +0/−16
- lib/Language/OCaml/Parser/SimplePattern.hs +0/−21
- lib/Language/OCaml/Parser/SimplePatternNotIdent.hs +0/−33
- lib/Language/OCaml/Parser/SingleAttrId.hs +0/−15
- lib/Language/OCaml/Parser/StrExceptionDeclaration.hs +0/−15
- lib/Language/OCaml/Parser/StrictBinding.hs +0/−24
- lib/Language/OCaml/Parser/Structure.hs +0/−39
- lib/Language/OCaml/Parser/StructureItem.hs +0/−32
- lib/Language/OCaml/Parser/Tokens.hs +0/−322
- lib/Language/OCaml/Parser/TypeConstraint.hs +0/−30
- lib/Language/OCaml/Parser/TypeDeclaration.hs +0/−34
- lib/Language/OCaml/Parser/TypeDeclarations.hs +0/−25
- lib/Language/OCaml/Parser/TypeKind.hs +0/−40
- lib/Language/OCaml/Parser/TypeLongident.hs +0/−20
- lib/Language/OCaml/Parser/TypeVariable.hs +0/−12
- lib/Language/OCaml/Parser/TypeVariance.hs +0/−16
- lib/Language/OCaml/Parser/Utils/Combinators.hs +0/−77
- lib/Language/OCaml/Parser/Utils/Types.hs +0/−8
- lib/Language/OCaml/Parser/Utils/Utils.hs +0/−115
- lib/Language/OCaml/Parser/ValIdent.hs +0/−20
- lib/Language/OCaml/Parser/ValLongident.hs +0/−23
- lib/Language/OCaml/PrettyPrinter.hs +18/−4
- lib/Language/OCaml/PrettyPrinter/Structure.hs +1/−1
- test/Language/OCaml/Parser/Common/Test.hs +0/−52
- test/Language/OCaml/Parser/Constant/Test.hs +1/−16
- test/Language/OCaml/Parser/ConstrLongident/Test.hs +2/−14
- test/Language/OCaml/Parser/CoreType/Test.hs +16/−0
- test/Language/OCaml/Parser/CoreType2/Test.hs +16/−0
- test/Language/OCaml/Parser/CoreTypeNoAttr/Test.hs +22/−0
- test/Language/OCaml/Parser/Generator/Expr/Test.hs +1/−3
- test/Language/OCaml/Parser/Generator/Implementation/Test.hs +13/−52
- test/Language/OCaml/Parser/Generator/LetBinding/Test.hs +17/−0
- test/Language/OCaml/Parser/Generator/SeqExpr/Test.hs +5/−9
- test/Language/OCaml/Parser/Generator/SimpleExpr/Test.hs +1/−1
- test/Language/OCaml/Parser/Generator/Structure/Test.hs +17/−0
- test/Language/OCaml/Parser/Generator/ValLongident/Test.hs +1/−1
- test/Language/OCaml/Parser/Ident/Test.hs +19/−0
- test/Language/OCaml/Parser/Implementation/Test.hs +17/−31
- test/Language/OCaml/Parser/Int/Test.hs +1/−17
- test/Language/OCaml/Parser/LetBinding/Test.hs +3/−3
- test/Language/OCaml/Parser/LetBindingBody/Test.hs +18/−6
- test/Language/OCaml/Parser/MatchCase/Test.hs +3/−18
- test/Language/OCaml/Parser/ModLongident/Test.hs +1/−17
- test/Language/OCaml/Parser/OpenStatement/Test.hs +3/−18
- test/Language/OCaml/Parser/Pattern/Test.hs +3/−18
- test/Language/OCaml/Parser/SimpleCoreType/Test.hs +16/−0
- test/Language/OCaml/Parser/SimpleCoreType2/Test.hs +20/−0
- test/Language/OCaml/Parser/SimpleCoreTypeOrTuple/Test.hs +16/−0
- test/Language/OCaml/Parser/SimplePattern/Test.hs +3/−18
- test/Language/OCaml/Parser/SimplePatternNotIdent/Test.hs +16/−0
- test/Language/OCaml/Parser/Structure/Test.hs +4/−18
- test/Language/OCaml/Parser/StructureItem/Test.hs +0/−2
- test/Language/OCaml/Parser/TestStrings.hs +10/−0
- test/Language/OCaml/Parser/TestUtils.hs +8/−45
- test/Language/OCaml/Parser/Tokens/Test.hs +0/−37
- test/Language/OCaml/PrettyPrinter/TestUtils.hs +4/−4
- test/Main.hs +12/−30
language-ocaml.cabal view
@@ -1,5 +1,5 @@ Name: language-ocaml-Version: 0.1.31+Version: 0.2.0 Synopsis: Language tools for manipulating OCaml programs in Haskell Description: Language tools for manipulating OCaml programs in Haskell. Curently includes a Alex/Happy parser, and a pretty-printer.@@ -22,19 +22,23 @@ hs-source-dirs: lib, test pkgconfig-depends: zlib build-tools: alex, happy- build-depends: array >= 0.5 && < 0.6,- base >= 4.9 && < 4.11,- containers >= 0.5 && < 0.7,- data-default >= 0.7 && < 0.8,- extensible-effects >= 3.0 && < 3.1,- interpolate >= 0.2 && < 0.3,- lens >= 4.16 && < 4.17,- megaparsec >= 6.0 && < 6.5,- mtl >= 2.2 && < 2.3,- prettyprinter >= 1.2 && < 1.3,- string-qq >= 0.0 && < 0.1,- tasty >= 1.0 && < 1.1,- tasty-hunit >= 0.9 && < 0.11+ build-depends: array >= 0.5 && < 0.6,+ base >= 4.9 && < 4.11,+ containers >= 0.5 && < 0.7,+ data-default >= 0.7 && < 0.8,+ directory >= 1.3 && < 1.4,+ extensible-effects >= 3.0 && < 3.1,+ extra >= 1.6 && < 1.7,+ filepath >= 1.4 && < 1.5,+ interpolate >= 0.2 && < 0.3,+ lens >= 4.16 && < 4.17,+ megaparsec >= 6.0 && < 6.5,+ mtl >= 2.2 && < 2.3,+ prettyprinter >= 1.2 && < 1.3,+ string-qq >= 0.0 && < 0.1,+ tasty >= 1.0 && < 1.1,+ tasty-golden >= 2.3 && < 2.4,+ tasty-hunit >= 0.9 && < 0.11 exposed-modules: Language.OCaml.Parser.Common Language.OCaml.Definitions.Parsing.ASTHelper.Exception@@ -61,8 +65,6 @@ Language.OCaml.Parser Language.OCaml.Parser.Generator.Lexer Language.OCaml.Parser.Generator.Parser- Language.OCaml.Parser.Internal- Language.OCaml.Parser.Utils.Utils Language.OCaml.PrettyPrinter Language.OCaml.PrettyPrinter.Internal other-modules:@@ -70,100 +72,6 @@ Language.OCaml.Definitions.StdLib.Lexing Language.OCaml.Definitions.StdLib.Parsing Language.OCaml.Utils- Language.OCaml.Parser.AndTypeDeclaration- Language.OCaml.Parser.Attribute- Language.OCaml.Parser.Attributes- Language.OCaml.Parser.AttrId- Language.OCaml.Parser.BarConstructorDeclaration- Language.OCaml.Parser.Constant- Language.OCaml.Parser.ConstrIdent- Language.OCaml.Parser.ConstrLongident- Language.OCaml.Parser.ConstructorArguments- Language.OCaml.Parser.ConstructorDeclaration- Language.OCaml.Parser.ConstructorDeclarations- Language.OCaml.Parser.CoreType- Language.OCaml.Parser.CoreType2- Language.OCaml.Parser.CoreTypeCommaList- Language.OCaml.Parser.CoreTypeList- Language.OCaml.Parser.CoreTypeNoAttr- Language.OCaml.Parser.Expr- Language.OCaml.Parser.ExprSemiList- Language.OCaml.Parser.FunBinding- Language.OCaml.Parser.FunDef- Language.OCaml.Parser.GeneralizedConstructorArguments- Language.OCaml.Parser.Implementation- Language.OCaml.Parser.Label- Language.OCaml.Parser.LabelDeclaration- Language.OCaml.Parser.LabelDeclarationSemi- Language.OCaml.Parser.LabelDeclarations- Language.OCaml.Parser.LabelLongident- Language.OCaml.Parser.LabeledSimpleExpr- Language.OCaml.Parser.LabeledSimplePattern- Language.OCaml.Parser.LblExpr- Language.OCaml.Parser.LblExprList- Language.OCaml.Parser.LblPattern- Language.OCaml.Parser.LblPatternList- Language.OCaml.Parser.LetBinding- Language.OCaml.Parser.LetBindingBody- Language.OCaml.Parser.LetBindings- Language.OCaml.Parser.MatchCase- Language.OCaml.Parser.MatchCases- Language.OCaml.Parser.ModExtLongident- Language.OCaml.Parser.ModLongident- Language.OCaml.Parser.ModuleBinding- Language.OCaml.Parser.ModuleBindingBody- Language.OCaml.Parser.ModuleExpr- Language.OCaml.Parser.MutableFlag- Language.OCaml.Parser.NonRecFlag- Language.OCaml.Parser.OpenStatement- Language.OCaml.Parser.Operator- Language.OCaml.Parser.OptBar- Language.OCaml.Parser.OptPatternTypeConstraint- Language.OCaml.Parser.OptTypeConstraint- Language.OCaml.Parser.OptSemi- Language.OCaml.Parser.OptionalTypeParameter- Language.OCaml.Parser.OptionalTypeParameters- Language.OCaml.Parser.OptionalTypeVariable- Language.OCaml.Parser.OverrideFlag- Language.OCaml.Parser.Pattern- Language.OCaml.Parser.PatternGen- Language.OCaml.Parser.PatternNoExn- Language.OCaml.Parser.PatternSemiList- Language.OCaml.Parser.Payload- Language.OCaml.Parser.PolyTypeNoAttr- Language.OCaml.Parser.PostItemAttribute- Language.OCaml.Parser.PostItemAttributes- Language.OCaml.Parser.PrivateFlag- Language.OCaml.Parser.RecFlag- Language.OCaml.Parser.RecordExpr- Language.OCaml.Parser.SeqExpr- Language.OCaml.Parser.SigExceptionDeclaration- Language.OCaml.Parser.SimpleCoreType- Language.OCaml.Parser.SimpleCoreType2- Language.OCaml.Parser.SimpleCoreTypeOrTuple- Language.OCaml.Parser.SimpleDelimitedPattern- Language.OCaml.Parser.SimpleExpr- Language.OCaml.Parser.SimplePattern- Language.OCaml.Parser.SimpleLabeledExprList- Language.OCaml.Parser.SimplePatternNotIdent- Language.OCaml.Parser.SingleAttrId- Language.OCaml.Parser.StrExceptionDeclaration- Language.OCaml.Parser.StrictBinding- Language.OCaml.Parser.Structure- Language.OCaml.Parser.StructureItem- Language.OCaml.Parser.TestUtils- Language.OCaml.Parser.Tokens- Language.OCaml.Parser.TypeConstraint- Language.OCaml.Parser.TypeDeclaration- Language.OCaml.Parser.TypeDeclarations- Language.OCaml.Parser.TypeKind- Language.OCaml.Parser.TypeVariable- Language.OCaml.Parser.TypeVariance- Language.OCaml.Parser.TypeLongident- Language.OCaml.Parser.Utils.Combinators- Language.OCaml.Parser.Utils.Types- Language.OCaml.Parser.ValIdent- Language.OCaml.Parser.ValLongident Language.OCaml.PrettyPrinter.ArgLabel Language.OCaml.PrettyPrinter.Case Language.OCaml.PrettyPrinter.Constant@@ -200,27 +108,36 @@ main-is: Main.hs build-depends: language-ocaml, base,+ directory,+ extra,+ filepath, interpolate, megaparsec, prettyprinter, string-qq, tasty,+ tasty-golden, tasty-hunit other-modules: Language.OCaml.Parser.AndLetBinding.Test Language.OCaml.Parser.Attribute.Test Language.OCaml.Parser.Attributes.Test Language.OCaml.Parser.AttrId.Test- Language.OCaml.Parser.Common.Test Language.OCaml.Parser.Constant.Test Language.OCaml.Parser.ConstrLongident.Test+ Language.OCaml.Parser.CoreType.Test+ Language.OCaml.Parser.CoreType2.Test+ Language.OCaml.Parser.CoreTypeNoAttr.Test Language.OCaml.Parser.Expr.Test Language.OCaml.Parser.ExtAttributes.Test Language.OCaml.Parser.Generator.Expr.Test Language.OCaml.Parser.Generator.Implementation.Test+ Language.OCaml.Parser.Generator.LetBinding.Test Language.OCaml.Parser.Generator.SeqExpr.Test Language.OCaml.Parser.Generator.SimpleExpr.Test+ Language.OCaml.Parser.Generator.Structure.Test Language.OCaml.Parser.Generator.ValLongident.Test+ Language.OCaml.Parser.Ident.Test Language.OCaml.Parser.Implementation.Test Language.OCaml.Parser.Int.Test Language.OCaml.Parser.LetBinding.Test@@ -236,8 +153,12 @@ Language.OCaml.Parser.PostItemAttributes.Test Language.OCaml.Parser.RecFlag.Test Language.OCaml.Parser.SeqExpr.Test+ Language.OCaml.Parser.SimpleCoreType.Test+ Language.OCaml.Parser.SimpleCoreType2.Test+ Language.OCaml.Parser.SimpleCoreTypeOrTuple.Test Language.OCaml.Parser.SimpleExpr.Test Language.OCaml.Parser.SimplePattern.Test+ Language.OCaml.Parser.SimplePatternNotIdent.Test Language.OCaml.Parser.SingleAttrId.Test Language.OCaml.Parser.StrictBinding.Test Language.OCaml.Parser.Structure.Test@@ -245,7 +166,6 @@ Language.OCaml.Parser.StructureTail.Test Language.OCaml.Parser.TestStrings Language.OCaml.Parser.TestUtils- Language.OCaml.Parser.Tokens.Test Language.OCaml.Parser.ValIdent.Test Language.OCaml.Parser.ValLongident.Test Language.OCaml.PrettyPrinter.Structure.Test
lib/Language/OCaml/Parser.hs view
@@ -1,27 +1,6 @@ module Language.OCaml.Parser- ( ParserC- , ParserG- , implementationP- , parseImplementationC- , parseImplementationG+ ( Parser+ , parseImplementation ) where -import Data.Void-import Text.Megaparsec (parse)-import Text.Megaparsec.Error--import Language.OCaml.Definitions.Parsing.ParseTree--- import qualified Language.OCaml.Parser.Generator.Lexer as GL-import qualified Language.OCaml.Parser.Generator.Parser as GP-import Language.OCaml.Parser.Implementation-import Language.OCaml.Parser.Utils.Types--type ParserC a = Parser a--type ParserG a = GP.Parser a--parseImplementationC :: String -> Either (ParseError Char Void) Structure-parseImplementationC = parse implementationP "Language.OCaml.Parser"--parseImplementationG :: GP.Parser [StructureItem]-parseImplementationG = GP.parseImplementation+import Language.OCaml.Parser.Generator.Parser
− lib/Language/OCaml/Parser/AndTypeDeclaration.hs
@@ -1,29 +0,0 @@-{-# LANGUAGE DisambiguateRecordFields #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE NamedFieldPuns #-}--module Language.OCaml.Parser.AndTypeDeclaration- ( andTypeDeclarationP- ) where--import Data.Default-import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTHelper.Type as Type-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.TypeKind-import Language.OCaml.Parser.PostItemAttributes-import Language.OCaml.Parser.Utils.Types--andTypeDeclarationP :: Parser Structure -> Parser TypeDeclaration-andTypeDeclarationP structureP = do- try $ andT- -- TODO: attributes- -- TODO: optionalTypeParameters- i <- lIdentT- (kind, priv, manifest) <- typeKindP structureP- -- TODO: constraints- attrs <- postItemAttributesP structureP -- FIXME: use me- return $ Type.mk (def { attrs, kind, priv }) manifest (mkRHS i 4) -- FIXME: [] and []
− lib/Language/OCaml/Parser/AttrId.hs
@@ -1,21 +0,0 @@-module Language.OCaml.Parser.AttrId- ( attrIdP- ) where--import Text.Megaparsec--import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.SingleAttrId-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--attrIdP :: Parser (ASTTypes.Loc String)-attrIdP = choice- [ do- a <- try $ singleAttrIdP <* dotT- b <- attrIdP- return $ mkLoc (a ++ "^" ++ ASTTypes.txt b) none -- FIXME symbolRLoc- , singleAttrIdP >>= \ a -> return $ mkLoc a none -- FIXME symbolRLoc- ]
− lib/Language/OCaml/Parser/Attribute.hs
@@ -1,21 +0,0 @@-module Language.OCaml.Parser.Attribute- ( attributeP- ) where--import Text.Megaparsec--import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.AttrId-import Language.OCaml.Parser.Payload-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--attributeP :: Parser Structure -> Parser (ASTTypes.Loc String, Payload)-attributeP structureP = do- i <- try $ do- lBracketAtT- attrIdP- p <- payloadP structureP- rBracketT- return (i, p)
− lib/Language/OCaml/Parser/Attributes.hs
@@ -1,13 +0,0 @@-module Language.OCaml.Parser.Attributes- ( attributesP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Attribute-import Language.OCaml.Parser.Utils.Types--attributesP :: Parser Structure -> Parser [(Loc String, Payload)]-attributesP structureP = many (attributeP structureP)
− lib/Language/OCaml/Parser/BarConstructorDeclaration.hs
@@ -1,27 +0,0 @@-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE NamedFieldPuns #-}--module Language.OCaml.Parser.BarConstructorDeclaration- ( barConstructorDeclarationP- ) where--import Data.Default-import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTHelper.Type as Type-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Attributes-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.ConstrIdent-import Language.OCaml.Parser.GeneralizedConstructorArguments-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--barConstructorDeclarationP ::- Parser Structure -> Parser CoreType -> Parser ConstructorDeclaration-barConstructorDeclarationP structureP coreTypeP = try $ do- barT- i <- constrIdentP- (args, res) <- generalizedConstructorArgumentsP coreTypeP- attrs <- attributesP structureP- return $ Type.constructor (def { args, attrs }) res (mkRHS i (2 :: Int))
lib/Language/OCaml/Parser/Common.hs view
@@ -14,7 +14,6 @@ , ghexp , ghtyp , ghpat- , identP , mkexp , mkexpAttrs , mkexpCons@@ -58,7 +57,6 @@ import Data.Default import Data.Maybe import Prelude hiding (exp)-import Text.Megaparsec import Language.OCaml.Definitions.Parsing.ASTHelper.Exp as Exp hiding (newType) import Language.OCaml.Definitions.Parsing.ASTHelper.Mod as Mod@@ -75,12 +73,6 @@ import Language.OCaml.Definitions.Parsing.ParseTree import Language.OCaml.Definitions.Parsing.Parser.LetBinding import Language.OCaml.Definitions.Parsing.Parser.LetBindings-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Utils-import Language.OCaml.Parser.Utils.Types--identP :: Parser String-identP = lexeme $ choice [ uIdentT, lIdentT ] mkstr :: StructureItemDesc -> StructureItem mkstr d = Str.mk def d -- FIXME: symbolRLoc
− lib/Language/OCaml/Parser/Constant.hs
@@ -1,23 +0,0 @@-module Language.OCaml.Parser.Constant- ( constantP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--constantP :: Parser Constant-constantP = choice- [ do- (n, m) <- intT- return $ PconstInteger n m- , PconstChar <$> charT- , do- (s, d) <- stringT- return $ PconstString s d- -- , do- -- (f, m) <- stringT- -- return $ PconstFloat f m- ]
− lib/Language/OCaml/Parser/ConstrIdent.hs
@@ -1,18 +0,0 @@-module Language.OCaml.Parser.ConstrIdent- ( constrIdentP- ) where--import Text.Megaparsec--import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--constrIdentP :: Parser String-constrIdentP = choice- [ uIdentT- , lBracketT *> rBracketT *> return "[]"- , lParenT *> rParenT *> return "()"- , lParenT *> colonColonT *> rParenT *> return "::"- , falseT *> return "false"- , trueT *> return "true"- ]
− lib/Language/OCaml/Parser/ConstrLongident.hs
@@ -1,28 +0,0 @@-module Language.OCaml.Parser.ConstrLongident- ( constrLongidentP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.ModLongident-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types-import Language.OCaml.Parser.Utils.Utils--constrLongidentP :: Parser Longident-constrLongidentP = choice- [ do- i <- try $ do- i <- modLongidentP- dotT- return i- parens colonColonT- return $ Ldot i "::"- , modLongidentP- , try $ lBracketT *> rBracketT *> (return $ Lident "[]")- , try $ lParenT *> rParenT *> (return $ Lident "()")- , try (lParenT *> colonColonT) *> rParenT *> (return $ Lident "::")- , falseT *> (return $ Lident "false")- , trueT *> (return $ Lident "true")- ]
− lib/Language/OCaml/Parser/ConstructorArguments.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.ConstructorArguments- ( constructorArgumentsP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.CoreTypeList-import Language.OCaml.Parser.Utils.Types--constructorArgumentsP :: Parser CoreType -> Parser ConstructorArguments-constructorArgumentsP coreTypeP = choice- [ PcstrTuple . reverse <$> coreTypelistP coreTypeP- -- TODO: label declarations- ]
− lib/Language/OCaml/Parser/ConstructorDeclaration.hs
@@ -1,25 +0,0 @@-{-# LANGUAGE DisambiguateRecordFields #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE NamedFieldPuns #-}--module Language.OCaml.Parser.ConstructorDeclaration- ( constructorDeclarationP- ) where--import Data.Default--import Language.OCaml.Definitions.Parsing.ASTHelper.Type as Type-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Attributes-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.ConstrIdent-import Language.OCaml.Parser.GeneralizedConstructorArguments-import Language.OCaml.Parser.Utils.Types--constructorDeclarationP ::- Parser Structure -> Parser CoreType -> Parser ConstructorDeclaration-constructorDeclarationP structureP coreTypeP = do- name <- constrIdentP- (args, res) <- generalizedConstructorArgumentsP coreTypeP- attrs <- attributesP structureP- return $ Type.constructor (def { args, attrs }) res (mkRHS name (1 :: Int))
− lib/Language/OCaml/Parser/ConstructorDeclarations.hs
@@ -1,23 +0,0 @@-module Language.OCaml.Parser.ConstructorDeclarations- ( constructorDeclarationsP- ) where--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.BarConstructorDeclaration-import Language.OCaml.Parser.ConstructorDeclaration-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--constructorDeclarationsP ::- Parser Structure -> Parser CoreType -> Parser [ConstructorDeclaration]-constructorDeclarationsP structureP coreTypeP = leftRecursive- [ (: []) <$> constructorDeclarationP'- , (: []) <$> barConstructorDeclarationP'- , barT *> return []- ]- [ (:) <$> barConstructorDeclarationP'- ]- where- constructorDeclarationP' = constructorDeclarationP structureP coreTypeP- barConstructorDeclarationP' = barConstructorDeclarationP structureP coreTypeP
− lib/Language/OCaml/Parser/CoreType.hs
@@ -1,18 +0,0 @@-module Language.OCaml.Parser.CoreType- ( coreTypeP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.CoreTypeNoAttr-import Language.OCaml.Parser.Utils.Types--coreTypeP :: Parser CoreType-coreTypeP = choice- [ coreTypenoAttrP coreTypeP- -- , do- -- t <- coreType- -- a <- attribute- -- return $ attr t a- ]
− lib/Language/OCaml/Parser/CoreType2.hs
@@ -1,26 +0,0 @@-module Language.OCaml.Parser.CoreType2- ( coreType2P- ) where--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.SimpleCoreTypeOrTuple-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--coreType2P :: Parser CoreType -> Parser CoreType-coreType2P coreTypeP = leftRecursive- [ simpleCoreTypeOrTupleP coreTypeP- -- TODO- ]- [ do- minusGreaterT- t2 <- coreType2P'- return $ \ t1 ->- let param = extraRHSCoreType t1 (1 :: Int) in- mktyp $ PtypArrow Nolabel param t2- ]- where- coreType2P' = coreType2P coreTypeP
− lib/Language/OCaml/Parser/CoreTypeCommaList.hs
@@ -1,12 +0,0 @@-module Language.OCaml.Parser.CoreTypeCommaList- ( coreTypeCommaListP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--coreTypeCommaListP :: Parser CoreType -> Parser [CoreType]-coreTypeCommaListP coreTypeP = sepBy coreTypeP commaT
− lib/Language/OCaml/Parser/CoreTypeList.hs
@@ -1,21 +0,0 @@-module Language.OCaml.Parser.CoreTypeList- ( coreTypelistP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.SimpleCoreType-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--coreTypelistP :: Parser CoreType -> Parser [CoreType]-coreTypelistP coreTypeP = leftRecursive- [ (: []) <$> simpleCoreTypeP coreTypeP- ]- [ do- try $ starT- t <- simpleCoreTypeP coreTypeP- return $ (:) t- ]
− lib/Language/OCaml/Parser/CoreTypeNoAttr.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.CoreTypeNoAttr- ( coreTypenoAttrP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.CoreType2-import Language.OCaml.Parser.Utils.Types--coreTypenoAttrP :: Parser CoreType -> Parser CoreType-coreTypenoAttrP coreTypeP = choice- [ coreType2P coreTypeP- -- , TODO- ]
− lib/Language/OCaml/Parser/Expr.hs
@@ -1,99 +0,0 @@-module Language.OCaml.Parser.Expr- ( exprP- ) where--import Text.Megaparsec hiding (token)--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.FunDef-import Language.OCaml.Parser.LabeledSimplePattern-import Language.OCaml.Parser.LetBindings-import Language.OCaml.Parser.MatchCases-import Language.OCaml.Parser.OptBar-import Language.OCaml.Parser.Pattern-import Language.OCaml.Parser.SimpleLabeledExprList-import Language.OCaml.Parser.SimpleExpr-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types-import Language.OCaml.PrettyPrinter ()--exprP :: Parser Structure -> Parser Expression -> Parser Expression-exprP structureP seqExprP = choice- [ try $ parser <* notFollowedBy commaT- , mkexp . PexpTuple . reverse <$>- chainl1' parser (commaT *> (return $ flip (:))) (: [])- ]- where- parser = leftRecursive- [ try $ do- e <- simpleExprP'- l <- simpleLabeledExprListP'- return $ mkexp $ PexpApply e (reverse l)- , do- b <- try $ do- b <- letBindingsP structureP seqExprP- inT- return b- e <- seqExprP- return $ exprOfLetBindings b e- -- FUNCTION- , do- try $ functionT- -- TODO: extAttributes- optBarP- l <- matchCasesP'- return $ mkexpAttrs (PexpFunction $ reverse l) (Nothing, []) -- FIXME- -- FUN- , do- try $ funT- -- TODO: extAttributes- (l, o, p) <- labeledSimplePatternP patternP- d <- funDefP seqExprP- return $ mkexpAttrs (PexpFun l o p d) (Nothing, []) -- FIXME- -- MATCH- , do- try $ matchT- -- TODO: extAttributes- e <- seqExprP- withT- optBarP- l <- matchCasesP'- return $ mkexpAttrs (PexpMatch e $ reverse l) (Nothing, []) -- FIXME- -- IF ... THEN ... ELSE ...- , do- try ifT- -- TODO: extAttributes- c <- seqExprP- thenT- t <- exprP'- e <- choice- [ do- try elseT- Just <$> exprP'- , return Nothing- ]- return $ mkexpAttrs (PexpIfThenElse c t e) (Nothing, []) -- FIXME- , simpleExprP'- ]- -- FIXME: deal with associativity?- [ infixP equalT "="- , infixP plusT "+"- , infixP minusT "-"- , infixP starT "*"- , infixP caretT "^"- , infixP greaterT ">"- , infixP atT "@"- ]-- infixP :: Parser () -> String -> Parser (Expression -> Expression)- infixP token symbol = try $ do- token- e2 <- exprP'- return $ \ e1 -> mkinfix e1 symbol e2-- exprP' = exprP structureP seqExprP- simpleExprP' = simpleExprP seqExprP exprP'- simpleLabeledExprListP' = simpleLabeledExprListP seqExprP exprP'- matchCasesP' = matchCasesP seqExprP
− lib/Language/OCaml/Parser/ExprSemiList.hs
@@ -1,18 +0,0 @@-module Language.OCaml.Parser.ExprSemiList- ( exprSemiListP- ) where--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--exprSemiListP :: Parser Expression -> Parser [Expression]-exprSemiListP exprP = leftRecursive- [ (: []) <$> exprP- ]- [ do- semiT- e2 <- exprP- return $ \ e1 -> e2 : e1- ]
− lib/Language/OCaml/Parser/FunBinding.hs
@@ -1,22 +0,0 @@-module Language.OCaml.Parser.FunBinding- ( funBindingP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.TypeConstraint-import Language.OCaml.Parser.StrictBinding-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--funBindingP :: Parser Expression -> Parser Expression-funBindingP seqExprP = choice- [ strictBindingP seqExprP (funBindingP seqExprP)- , do- c <- typeConstraintP- equalT- e <- seqExprP- return $ mkexpConstraint e c- ]
− lib/Language/OCaml/Parser/FunDef.hs
@@ -1,27 +0,0 @@-module Language.OCaml.Parser.FunDef- ( funDefP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.LabeledSimplePattern-import Language.OCaml.Parser.Pattern-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types-import Language.OCaml.PrettyPrinter ()--funDefP :: Parser Expression -> Parser Expression-funDefP seqExprP = choice- [ do- minusGreaterT- seqExprP- -- TODO- , do- (l, o, p) <- labeledSimplePatternP patternP- d <- funDefP'- return $ ghexp $ PexpFun l o p d- ]- where- funDefP' = funDefP seqExprP
− lib/Language/OCaml/Parser/GeneralizedConstructorArguments.hs
@@ -1,17 +0,0 @@-module Language.OCaml.Parser.GeneralizedConstructorArguments- ( generalizedConstructorArgumentsP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.ConstructorArguments-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--generalizedConstructorArgumentsP :: Parser CoreType -> Parser (ConstructorArguments, Maybe a)-generalizedConstructorArgumentsP coreTypeP = choice- [ flip (,) Nothing <$> (ofT *> constructorArgumentsP coreTypeP)- -- TODO: colon- , return (PcstrTuple [], Nothing)- ]
lib/Language/OCaml/Parser/Generator/Lexer.x view
@@ -40,7 +40,7 @@ $blank = [\ \t \f] $identChar = [A-Z a-z _ '\'' 0-9] $lowerCase = [a-z _]-$symbolChar = [!]-- '$' '%']-- '&' '*' '+' '-' '.' ] -- '/' ':' '<' '=' '>' '?' '@' '^' '|' '~']+$symbolChar = [\! \$ \% \& \* \+ \- \. \/ \: \< \= \> \? \@ \^ \| \~] $upperCase = [A-Z] -- Regular expression macros@@ -143,8 +143,16 @@ <0> "-" { tok TokMinus } <0> "-." { tok TokMinusDot } <0> "!" $symbolChar+ { tokS TokPrefixOp }+ <0> [\~ \?] $symbolChar+ { tokS TokPrefixOp }+ <0> [\= \< \> \| \& \$] $symbolChar+ { tokS TokInfixOp0 }+ <0> [\@ \^] $symbolChar* { tokS TokInfixOp1 }+ <0> [\+ \-] $symbolChar* { tokS TokInfixOp2 }+ <0> "**" $symbolChar* { tokS TokInfixOp4 }+ <0> "%" { tok TokPercent }+ <0> [\* \/ \%] $symbolChar* { tokS TokInfixOp3 }+ -- <0> '#' (symbolchar | '#') + { HASHOP op } -- TODO- <0> [= \< > \| & \$] $symbolChar* { tokS TokInfixOp0 }+ <0> [\= \< \> \| \& \$] $symbolChar* { tokS TokInfixOp0 } -- while inside a string <s> \" { endString }@@ -540,6 +548,7 @@ commentString <- getStringBuffer let (endLine, endCol) = getMyPosition alexInput let ss = SrcSpan startLine startCol endLine endCol+ alexSetStartCode codeStartCode return $ Just $ Located ss $ TokComment commentString _ -> do popCommentStartLoc
lib/Language/OCaml/Parser/Generator/Parser.y view
@@ -10,11 +10,13 @@ , parseExpr , parseExprCommaList , parseImplementation+ , parseLetBinding , parseModLongident , parseOpenStatement , parsePattern , parseSeqExpr , parseSimpleExpr+ , parseSimplePattern , parseStructure , parseStructureItem , parseValIdent@@ -51,11 +53,13 @@ %name rawParseExpr Expr %name rawParseExprCommaList ExprCommaList %name rawParseImplementation Implementation+%name rawParseLetBinding LetBinding %name rawParseModLongident ModLongident %name rawParseOpenStatement OpenStatement %name rawParsePattern Pattern %name rawParseSeqExpr SeqExpr %name rawParseSimpleExpr SimpleExpr+%name rawParseSimplePattern SimplePattern %name rawParseStructureItem StructureItem %name rawParseStructure Structure %name rawParseValIdent ValIdent@@ -227,6 +231,10 @@ %% +Additive :: { String }+ : "+" { "+" }+ | "+." { "+." }+ AmperTypeList :: { [CoreType] } : CoreTypeNoAttr { [$1] } | AmperTypeList "&" CoreTypeNoAttr { $3 : $1 }@@ -378,6 +386,11 @@ "=" SeqExpr DirectionFlag SeqExpr do SeqExpr done { mkexpAttrs (PexpFor $3 $5 $7 $6 $9) $2 } | Expr "::" Expr { mkexpCons (rhsLoc 2) (ghexp $ PexpTuple [$1, $3]) (symbolRLoc ()) }+ | Expr INFIXOP0 Expr { mkinfix $1 $2 $3 }+ | Expr INFIXOP1 Expr { mkinfix $1 $2 $3 }+ | Expr INFIXOP2 Expr { mkinfix $1 $2 $3 }+ | Expr INFIXOP3 Expr { mkinfix $1 $2 $3 }+ | Expr INFIXOP4 Expr { mkinfix $1 $2 $3 } -- TODO: infixops | Expr "+" Expr { mkinfix $1 "+" $3 } | Expr "+." Expr { mkinfix $1 "+." $3 }@@ -394,8 +407,11 @@ | Expr "&" Expr { mkinfix $1 "&" $3 } | Expr "&&" Expr { mkinfix $1 "&&" $3 } | Expr ":=" Expr { mkinfix $1 ":=" $3 }- -- TODO+ | Subtractive Expr %prec precUnaryMinus { mkuminus $1 $2 }+ | Additive Expr %prec precUnaryPlus { mkuplus $1 $2 } | SimpleExpr "." LabelLongident "<-" Expr { mkexp $ PexpSetField $1 (mkRHS $3 3) $5 }+ -- TODO: label LESSMINUS expr+ | assert ExtAttributes SimpleExpr %prec belowHash { mkexpAttrs (PexpAssert $3) $2 } -- TODO -- | Expr Attribute { attrExp $1 $2 } | "_" {% alexError "Wildcard not expected" }@@ -874,6 +890,14 @@ : SimpleExpr with LblExprList { (Just $1, $3) } | LblExprList { (Nothing, $1) } +RowField :: { a }+ : TagField { $1 }+ | SimpleCoreType { Rinherit $1 }++RowFieldList :: { [a] }+ : RowField { [$1] }+ | RowFieldList "|" RowField { $3 : $1 }+ SeqExpr :: { Expression } : Expr %prec belowSemi { $1 } | Expr ";" { $1 }@@ -935,6 +959,7 @@ | "(" CoreTypeCommaList ")" "#" ClassLongident { mktyp $ PtypClass (mkRHS $5 5) (reverse $2) } | "[" TagField "]" { mktyp $ PtypVariant [$2] Closed Nothing } -- TODO+ | "[" "|" RowFieldList "]" { mktyp $ PtypVariant (reverse $3) Closed Nothing } | "[>" "]" { mktyp $ PtypVariant [] Open Nothing } SimpleCoreTypeOrTuple :: { CoreType }@@ -1094,9 +1119,13 @@ StructureTail :: { Structure } : {- empty -} { [] }- | "::" Structure { (textStr 1) ++ $2 }+ | ";;" Structure { (textStr 1) ++ $2 } | StructureItem StructureTail { (textStr 1) ++ $1 : $2 } +Subtractive :: { String }+ : "-" { "-" }+ | "-." { "-." }+ TagField :: { RowField } : NameTag of OptAmpersand AmperTypeList Attributes { Rtag (mkRHS $1 1) (addInfoAttrs (symbolInfo ()) $5) $3 (reverse $4) } -- TODO@@ -1162,7 +1191,7 @@ ValIdent :: { String } : LIDENT { $1 }- | "(" Operator ")" { error "TODO ValIdent" }+ | "(" Operator ")" { $2 } -- TODO ValLongident :: { Longident }@@ -1199,6 +1228,9 @@ parseImplementation :: Parser [StructureItem] parseImplementation = myParse rawParseImplementation +parseLetBinding :: Parser LetBindings+parseLetBinding = myParse rawParseLetBinding+ parseModLongident :: Parser Longident parseModLongident = myParse rawParseModLongident @@ -1214,6 +1246,9 @@ parseSimpleExpr :: Parser Expression parseSimpleExpr = myParse rawParseSimpleExpr +parseSimplePattern :: Parser Pattern+parseSimplePattern = myParse rawParseSimplePattern+ parseStructure :: Parser Structure parseStructure = myParse rawParseStructure @@ -1228,5 +1263,28 @@ myParse :: Alex a -> String -> Either String a myParse = flip runAlex++negString :: String -> String+negString f =+ if length f > 0 && f !! 0 == '-'+ then tail f+ else '-' : f++mkuminus :: String -> Expression -> Expression+mkuminus name arg =+ case (name, pexpDesc arg) of+ ("-", PexpConstant (PconstInteger n m)) -> mkexp $ PexpConstant $ PconstInteger (negString n) m+ ("-", PexpConstant (PconstFloat f m)) -> mkexp $ PexpConstant $ PconstFloat (negString f) m+ ("-.", PexpConstant (PconstFloat f m)) -> mkexp $ PexpConstant $ PconstFloat (negString f) m+ _ -> mkexp $ PexpApply (mkOperator ("~" ++ name) 1) [(Nolabel, arg)]++mkuplus :: String -> Expression -> Expression+mkuplus name arg =+ let desc = pexpDesc arg in+ case (name, desc) of+ ("+", PexpConstant (PconstInteger _ _)) -> mkexp desc+ ("+", PexpConstant (PconstFloat _ _)) -> mkexp desc+ ("+.", PexpConstant (PconstFloat _ _)) -> mkexp desc+ _ -> mkexp $ PexpApply (mkOperator ("~" ++ name) 1) [(Nolabel, arg)] }
− lib/Language/OCaml/Parser/Implementation.hs
@@ -1,13 +0,0 @@-module Language.OCaml.Parser.Implementation- ( implementationP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Structure-import Language.OCaml.Parser.Utils.Utils-import Language.OCaml.Parser.Utils.Types--implementationP :: Parser Structure-implementationP = ocamlSpace *> structureP <* eof
− lib/Language/OCaml/Parser/Internal.hs
@@ -1,200 +0,0 @@-module Language.OCaml.Parser.Internal- ( module Language.OCaml.Parser.Tokens- , Parser- , attributeP- , attributesP- , barConstructorDeclarationP- , constantP- , constrIdentP- , constrLongidentP- , constructorArgumentsP- , constructorDeclarationP- , constructorDeclarationsP- , coreTypeP- , coreType2P- , coreTypeCommaListP- , coreTypelistP- , exprP- , generalizedConstructorArgumentsP- , identP- , implementationP- , labeledSimpleExprP- , lblExprP- , lblExprListP- , letBindingP- , letBindingBodyP- , matchCaseP- , modLongidentP- , openStatementP- , patternP- , patternNoExnP- , postItemAttributesP- , recordExprP- , seqExprP- , simpleCoreTypeP- , simpleCoreType2P- , simpleCoreTypeOrTupleP- , simpleExprP- , simpleLabeledExprListP- , simplePatternP- , structureP- , structureItemP- , typeDeclarationP- , typeDeclarationsP- , typeKindP- , valIdentP- , valLongidentP- ) where--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.Parser.LetBindings-import Language.OCaml.Definitions.Parsing.ParseTree-import qualified Language.OCaml.Parser.Attribute-import qualified Language.OCaml.Parser.Attributes-import qualified Language.OCaml.Parser.BarConstructorDeclaration-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Constant-import Language.OCaml.Parser.ConstrIdent-import Language.OCaml.Parser.ConstrLongident-import qualified Language.OCaml.Parser.ConstructorArguments-import qualified Language.OCaml.Parser.ConstructorDeclaration-import qualified Language.OCaml.Parser.ConstructorDeclarations-import Language.OCaml.Parser.CoreType-import qualified Language.OCaml.Parser.CoreType2-import qualified Language.OCaml.Parser.CoreTypeCommaList-import qualified Language.OCaml.Parser.CoreTypeList-import qualified Language.OCaml.Parser.Expr-import qualified Language.OCaml.Parser.GeneralizedConstructorArguments-import Language.OCaml.Parser.Implementation-import qualified Language.OCaml.Parser.LabeledSimpleExpr-import qualified Language.OCaml.Parser.LblExpr-import qualified Language.OCaml.Parser.LblExprList-import qualified Language.OCaml.Parser.LetBinding-import qualified Language.OCaml.Parser.LetBindingBody-import qualified Language.OCaml.Parser.MatchCase-import Language.OCaml.Parser.ModLongident-import Language.OCaml.Parser.OpenStatement-import Language.OCaml.Parser.Pattern-import Language.OCaml.Parser.PatternNoExn-import qualified Language.OCaml.Parser.PostItemAttributes-import qualified Language.OCaml.Parser.RecordExpr-import qualified Language.OCaml.Parser.SeqExpr-import qualified Language.OCaml.Parser.SimpleCoreType-import qualified Language.OCaml.Parser.SimpleCoreType2-import qualified Language.OCaml.Parser.SimpleCoreTypeOrTuple-import qualified Language.OCaml.Parser.SimpleExpr-import qualified Language.OCaml.Parser.SimpleLabeledExprList-import qualified Language.OCaml.Parser.SimplePattern-import Language.OCaml.Parser.Structure-import qualified Language.OCaml.Parser.StructureItem-import Language.OCaml.Parser.Tokens-import qualified Language.OCaml.Parser.TypeDeclaration-import qualified Language.OCaml.Parser.TypeDeclarations-import qualified Language.OCaml.Parser.TypeKind-import Language.OCaml.Parser.ValIdent-import Language.OCaml.Parser.ValLongident-import Language.OCaml.Parser.Utils.Types---- Tying the knots for our clients!--attributeP :: Parser (Loc String, Payload)-attributeP = Language.OCaml.Parser.Attribute.attributeP structureP--attributesP :: Parser [(Loc String, Payload)]-attributesP = Language.OCaml.Parser.Attributes.attributesP structureP--barConstructorDeclarationP :: Parser ConstructorDeclaration-barConstructorDeclarationP =- Language.OCaml.Parser.BarConstructorDeclaration.barConstructorDeclarationP structureP coreTypeP--constructorArgumentsP :: Parser ConstructorArguments-constructorArgumentsP =- Language.OCaml.Parser.ConstructorArguments.constructorArgumentsP coreTypeP--constructorDeclarationP :: Parser ConstructorDeclaration-constructorDeclarationP =- Language.OCaml.Parser.ConstructorDeclaration.constructorDeclarationP structureP coreTypeP--constructorDeclarationsP :: Parser [ConstructorDeclaration]-constructorDeclarationsP =- Language.OCaml.Parser.ConstructorDeclarations.constructorDeclarationsP structureP coreTypeP--coreType2P :: Parser CoreType-coreType2P = Language.OCaml.Parser.CoreType2.coreType2P coreTypeP--coreTypeCommaListP :: Parser [CoreType]-coreTypeCommaListP =- Language.OCaml.Parser.CoreTypeCommaList.coreTypeCommaListP coreTypeP--coreTypelistP :: Parser [CoreType]-coreTypelistP = Language.OCaml.Parser.CoreTypeList.coreTypelistP coreTypeP--exprP :: Parser Expression-exprP = Language.OCaml.Parser.Expr.exprP structureP seqExprP--generalizedConstructorArgumentsP :: Parser (ConstructorArguments, Maybe a)-generalizedConstructorArgumentsP =- Language.OCaml.Parser.GeneralizedConstructorArguments.generalizedConstructorArgumentsP- coreTypeP--lblExprP :: Parser (Loc Longident, Expression)-lblExprP = Language.OCaml.Parser.LblExpr.lblExprP exprP--lblExprListP :: Parser [(Loc Longident, Expression)]-lblExprListP = Language.OCaml.Parser.LblExprList.lblExprListP exprP--labeledSimpleExprP :: Parser (ArgLabel, Expression)-labeledSimpleExprP =- Language.OCaml.Parser.LabeledSimpleExpr.labeledSimpleExprP seqExprP exprP--letBindingP :: Parser LetBindings-letBindingP =- Language.OCaml.Parser.LetBinding.letBindingP structureP seqExprP--letBindingBodyP :: Parser (Pattern, Expression)-letBindingBodyP =- Language.OCaml.Parser.LetBindingBody.letBindingBodyP seqExprP--matchCaseP :: Parser Case-matchCaseP = Language.OCaml.Parser.MatchCase.matchCaseP seqExprP--postItemAttributesP :: Parser [(Loc String, Payload)]-postItemAttributesP = Language.OCaml.Parser.PostItemAttributes.postItemAttributesP structureP--recordExprP :: Parser (Maybe Expression, [(Loc Longident, Expression)])-recordExprP = Language.OCaml.Parser.RecordExpr.recordExprP exprP simpleExprP--seqExprP :: Parser Expression-seqExprP = Language.OCaml.Parser.SeqExpr.seqExprP structureP--simpleCoreTypeP :: Parser CoreType-simpleCoreTypeP = Language.OCaml.Parser.SimpleCoreType.simpleCoreTypeP coreTypeP--simpleCoreType2P :: Parser CoreType-simpleCoreType2P = Language.OCaml.Parser.SimpleCoreType2.simpleCoreType2P coreTypeP--simpleCoreTypeOrTupleP :: Parser CoreType-simpleCoreTypeOrTupleP =- Language.OCaml.Parser.SimpleCoreTypeOrTuple.simpleCoreTypeOrTupleP coreTypeP--simpleExprP :: Parser Expression-simpleExprP = Language.OCaml.Parser.SimpleExpr.simpleExprP seqExprP exprP--simpleLabeledExprListP :: Parser [(ArgLabel, Expression)]-simpleLabeledExprListP =- Language.OCaml.Parser.SimpleLabeledExprList.simpleLabeledExprListP seqExprP exprP--simplePatternP :: Parser Pattern-simplePatternP = Language.OCaml.Parser.SimplePattern.simplePatternP patternP--structureItemP :: Parser StructureItem-structureItemP = Language.OCaml.Parser.StructureItem.structureItemP structureP--typeDeclarationP :: Parser (RecFlag, TypeDeclaration)-typeDeclarationP = Language.OCaml.Parser.TypeDeclaration.typeDeclarationP structureP--typeDeclarationsP :: Parser (RecFlag, [TypeDeclaration])-typeDeclarationsP = Language.OCaml.Parser.TypeDeclarations.typeDeclarationsP structureP--typeKindP :: Parser (TypeKind, PrivateFlag, Maybe CoreType)-typeKindP = Language.OCaml.Parser.TypeKind.typeKindP structureP
− lib/Language/OCaml/Parser/Label.hs
@@ -1,9 +0,0 @@-module Language.OCaml.Parser.Label- ( labelP- ) where--import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--labelP :: Parser String-labelP = lIdentT
− lib/Language/OCaml/Parser/LabelDeclaration.hs
@@ -1,24 +0,0 @@-module Language.OCaml.Parser.LabelDeclaration- ( labelDeclarationP- ) where--import Data.Default-import Text.Megaparsec hiding (label)--import Language.OCaml.Definitions.Parsing.ASTHelper.Type as Type-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Label-import Language.OCaml.Parser.MutableFlag-import Language.OCaml.Parser.PolyTypeNoAttr-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--labelDeclarationP :: Parser LabelDeclaration-labelDeclarationP = try $ do- _mut <- mutableFlagP- label <- labelP- colonT- t <- polyTypeNoAttrP- -- TODO: attributes- return $ field def (mkRHS label 2) t -- FIXME: def
− lib/Language/OCaml/Parser/LabelDeclarationSemi.hs
@@ -1,26 +0,0 @@-module Language.OCaml.Parser.LabelDeclarationSemi- ( labelDeclarationSemiP- ) where--import Data.Default-import Text.Megaparsec hiding (label)--import Language.OCaml.Definitions.Parsing.ASTHelper.Type as Type-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Label-import Language.OCaml.Parser.MutableFlag-import Language.OCaml.Parser.PolyTypeNoAttr-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--labelDeclarationSemiP :: Parser LabelDeclaration-labelDeclarationSemiP = try $ do- _mut <- mutableFlagP- label <- labelP- colonT- t <- polyTypeNoAttrP- -- TODO: attributes- semiT- -- TODO: attributes- return $ Type.field def (mkRHS label 2) t -- FIXME: def
− lib/Language/OCaml/Parser/LabelDeclarations.hs
@@ -1,20 +0,0 @@-module Language.OCaml.Parser.LabelDeclarations- ( labelDeclarationsP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.LabelDeclaration-import Language.OCaml.Parser.LabelDeclarationSemi-import Language.OCaml.Parser.Utils.Types--labelDeclarationsP :: Parser [LabelDeclaration]-labelDeclarationsP = choice- [ do- h <- labelDeclarationSemiP- t <- labelDeclarationsP- return $ h : t- , (: []) <$> labelDeclarationSemiP- , (: []) <$> labelDeclarationP- ]
− lib/Language/OCaml/Parser/LabelLongident.hs
@@ -1,20 +0,0 @@-module Language.OCaml.Parser.LabelLongident- ( labelLongidentP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.ModLongident-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--labelLongidentP :: Parser Longident-labelLongidentP = choice- [ Lident <$> lIdentT- , do- m <- modLongidentP- dotT- i <- lIdentT- return $ Ldot m i- ]
− lib/Language/OCaml/Parser/LabeledSimpleExpr.hs
@@ -1,18 +0,0 @@-module Language.OCaml.Parser.LabeledSimpleExpr- ( labeledSimpleExprP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.SimpleExpr-import Language.OCaml.Parser.Utils.Types--labeledSimpleExprP :: Parser Expression -> Parser Expression -> Parser (ArgLabel, Expression)-labeledSimpleExprP seqExprP exprP = choice- [ do- e <- simpleExprP seqExprP exprP- return (Nolabel, e)- -- TODO: labelExpr- ]
− lib/Language/OCaml/Parser/LabeledSimplePattern.hs
@@ -1,18 +0,0 @@-module Language.OCaml.Parser.LabeledSimplePattern- ( labeledSimplePatternP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.SimplePattern-import Language.OCaml.Parser.Utils.Types--labeledSimplePatternP :: Parser Pattern -> Parser (ArgLabel, Maybe a, Pattern)-labeledSimplePatternP patternP = choice- [ -- TODO: lots of things- do- p <- simplePatternP patternP- return (Nolabel, Nothing, p)- ]
− lib/Language/OCaml/Parser/LblExpr.hs
@@ -1,23 +0,0 @@-module Language.OCaml.Parser.LblExpr- ( lblExprP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.LabelLongident-import Language.OCaml.Parser.OptTypeConstraint-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--lblExprP :: Parser Expression -> Parser (Loc Longident, Expression)-lblExprP exprP = choice- [ do- i <- labelLongidentP- c <- optTypeConstraintP- equalT- e <- exprP- return (mkRHS i 1, mkexpOptConstraint e c)- ]
− lib/Language/OCaml/Parser/LblExprList.hs
@@ -1,31 +0,0 @@-module Language.OCaml.Parser.LblExprList- ( lblExprListP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.LblExpr-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types---- FIXME: Right now, this is made to look like the OCaml parser, but we could--- optimize everything by factoring out the left parsers that are the same.--lblExprListP :: Parser Expression -> Parser [(Loc Longident, Expression)]-lblExprListP exprP = choice- [ try $ do- e <- lblExprP'- semiT- l <- lblExprListP'- return $ e : l- , try $ do- e <- lblExprP'- semiT- return [e]- , (: []) <$> lblExprP'- ]- where- lblExprP' = lblExprP exprP- lblExprListP' = lblExprListP exprP
− lib/Language/OCaml/Parser/LblPattern.hs
@@ -1,29 +0,0 @@-module Language.OCaml.Parser.LblPattern- ( lblPatternP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.LabelLongident-import Language.OCaml.Parser.OptPatternTypeConstraint-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--lblPatternP :: Parser Pattern -> Parser (Loc Longident, Pattern)-lblPatternP patternP = choice- [ do- (i, c) <- try $ do- i <- labelLongidentP- c <- optPatternTypeConstraintP- equalT- return (i, c)- p <- patternP- return (mkRHS i 1, mkpatOptConstraint p c)- , do- i <- labelLongidentP- c <- optPatternTypeConstraintP- return (mkRHS i 1, mkpatOptConstraint (patOfLabel i 1) c)- ]
− lib/Language/OCaml/Parser/LblPatternList.hs
@@ -1,40 +0,0 @@-module Language.OCaml.Parser.LblPatternList- ( lblPatternListP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.LblPattern-import Language.OCaml.Parser.OptSemi-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types---- FIXME: Right now, this is made to look like the OCaml parser, but we could--- optimize everything by factoring out the left parsers that are the same.--lblPatternListP :: Parser Pattern -> Parser ([(Loc Longident, Pattern)], ClosedFlag)-lblPatternListP patternP = choice- [ try $ do- p <- lblPatternP'- semiT- (fields, closed) <- lblPatternListP'- return (p : fields, closed)- , try $ do- p <- lblPatternP'- semiT- underscoreT- optSemiP- return ([p], Open)- , try $ do- p <- lblPatternP'- semiT- return ([p], Closed)- , do- p <- lblPatternP'- return ([p], Closed)- ]- where- lblPatternP' = lblPatternP patternP- lblPatternListP' = lblPatternListP patternP
− lib/Language/OCaml/Parser/LetBinding.hs
@@ -1,23 +0,0 @@-module Language.OCaml.Parser.LetBinding- ( letBindingP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.Parser.LetBindings-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.LetBindingBody-import Language.OCaml.Parser.PostItemAttributes-import Language.OCaml.Parser.RecFlag-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--letBindingP :: Parser Structure -> Parser Expression -> Parser LetBindings-letBindingP structureP seqExprP = do- try letT- -- TODO: extAttributes- r <- recFlagP- b <- letBindingBodyP seqExprP- _a <- postItemAttributesP structureP- return $ mklbs Nothing r (mklb True b []) -- FIXME
− lib/Language/OCaml/Parser/LetBindingBody.hs
@@ -1,61 +0,0 @@-module Language.OCaml.Parser.LetBindingBody- ( letBindingBodyP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.CoreType-import Language.OCaml.Parser.FunBinding-import Language.OCaml.Parser.Pattern-import Language.OCaml.Parser.PatternNoExn-import Language.OCaml.Parser.SimplePatternNotIdent-import Language.OCaml.Parser.StrictBinding-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.TypeConstraint-import Language.OCaml.Parser.ValIdent-import Language.OCaml.Parser.Utils.Types--letBindingBodyP :: Parser Expression -> Parser (Pattern, Expression)-letBindingBodyP seqExprP = choice- [ try $ do- i <- valIdentP- b <- strictBindingP seqExprP (funBindingP seqExprP)- return (mkpatvar i 1, b)- , do- (i, c) <- try $ do- i <- valIdentP- c <- typeConstraintP- return (i, c)- equalT- e <- seqExprP- let v = mkpatvar i 1- let t = case c of- (Just t', Nothing) -> t'- (_, Just t') -> t'- _ -> error "This should not happen"- return ( ghpat $ PpatConstraint v (ghtyp $ PtypPoly [] t)- , mkexpConstraint e c- )- -- TODO: typevarList- -- TODO: lidentList- , do- p <- try $ do- p <- patternNoExnP- equalT- return p- e <- seqExprP- return (p, e)- , do- p <- try $ do- p <- simplePatternNotIdentP patternP- colonT- return p- t <- coreTypeP- equalT- e <- seqExprP- return ( ghpat $ PpatConstraint p t- , e- )- ]
− lib/Language/OCaml/Parser/LetBindings.hs
@@ -1,28 +0,0 @@-module Language.OCaml.Parser.LetBindings- ( letBindingsP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Definitions.Parsing.Parser.LetBindings-import Language.OCaml.Parser.Common--- import Language.OCaml.Parser.Attributes-import Language.OCaml.Parser.LetBinding-import Language.OCaml.Parser.LetBindingBody-import Language.OCaml.Parser.PostItemAttributes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--letBindingsP :: Parser Structure -> Parser Expression -> Parser LetBindings-letBindingsP structureP seqExprP = leftRecursive- [ letBindingP structureP seqExprP- ]- [ do- try $ andT- -- a <- attributesP- b <- letBindingBodyP seqExprP- _p <- postItemAttributesP structureP- return $ \ x -> addlb x (mklb False b []) -- FIXME- ]
− lib/Language/OCaml/Parser/MatchCase.hs
@@ -1,33 +0,0 @@-module Language.OCaml.Parser.MatchCase- ( matchCaseP- ) where--import Data.Default-import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTHelper.Exp as Exp hiding (try)-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Pattern-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--matchCaseP :: Parser Expression -> Parser Case-matchCaseP seqExprP = choice- [ do- p <- try $ do- p <- patternP- minusGreaterT- return p- e <- seqExprP- return $ Exp.case' def p e- , do- p <- try $ do- p <- patternP- whenT- return p- w <- seqExprP- minusGreaterT- e <- seqExprP- return $ Exp.case' (def { guard = Just w }) p e- -- TODO: others- ]
− lib/Language/OCaml/Parser/MatchCases.hs
@@ -1,13 +0,0 @@-module Language.OCaml.Parser.MatchCases- ( matchCasesP- ) where--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.MatchCase-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--matchCasesP :: Parser Expression -> Parser [Case]-matchCasesP seqExprP =- chainl1' (matchCaseP seqExprP) (barT *> return (flip (:))) (: [])
− lib/Language/OCaml/Parser/ModExtLongident.hs
@@ -1,21 +0,0 @@-module Language.OCaml.Parser.ModExtLongident- ( modExtLongidentP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--modExtLongidentP :: Parser Longident-modExtLongidentP = leftRecursive- [ Lident <$> uIdentT- ]- [ try $ do- dotT- i <- uIdentT- return $ \ x -> Ldot x i- -- TODO: parens- ]
− lib/Language/OCaml/Parser/ModLongident.hs
@@ -1,11 +0,0 @@-module Language.OCaml.Parser.ModLongident- ( modLongidentP- ) where--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--modLongidentP :: Parser Longident-modLongidentP = chainl1try' uIdentT (dotT *> return Ldot) Lident
− lib/Language/OCaml/Parser/ModuleBinding.hs
@@ -1,25 +0,0 @@-module Language.OCaml.Parser.ModuleBinding- ( moduleBindingP- ) where--import Data.Default-import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTHelper.Mb as Mb-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.ModuleBindingBody-import Language.OCaml.Parser.PostItemAttributes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--moduleBindingP :: Parser Structure -> Parser (ModuleBinding, ())-moduleBindingP structureP = do- try $ moduleT- -- TODO: extAttributes- i <- uIdentT- b <- moduleBindingBodyP- _a <- postItemAttributesP structureP- return $ (Mb.mk def (mkRHS i 3) b -- FIXME- , () -- FIXME- )
− lib/Language/OCaml/Parser/ModuleBindingBody.hs
@@ -1,18 +0,0 @@-module Language.OCaml.Parser.ModuleBindingBody- ( moduleBindingBodyP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.ModuleExpr-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--moduleBindingBodyP :: Parser ModuleExpr-moduleBindingBodyP = choice- [ do- try $ equalT- moduleExprP- -- TODO: rest- ]
− lib/Language/OCaml/Parser/ModuleExpr.hs
@@ -1,17 +0,0 @@-module Language.OCaml.Parser.ModuleExpr- ( moduleExprP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.ModLongident-import Language.OCaml.Parser.Utils.Types--moduleExprP :: Parser ModuleExpr-moduleExprP = choice- [ do- i <- modLongidentP- return . mkmod Nothing $ PmodIdent (mkRHS i 1)- ]
− lib/Language/OCaml/Parser/MutableFlag.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.MutableFlag- ( mutableFlagP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--mutableFlagP :: Parser MutableFlag-mutableFlagP = choice- [ mutableT *> return Mutable- , return Immutable- ]
− lib/Language/OCaml/Parser/NonRecFlag.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.NonRecFlag- ( nonrecFlagP- ) where--import Text.Megaparsec--import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--nonrecFlagP :: Parser ASTTypes.RecFlag-nonrecFlagP = choice- [ nonrecT *> return ASTTypes.NonRecursive- , return ASTTypes.Recursive- ]
− lib/Language/OCaml/Parser/OpenStatement.hs
@@ -1,37 +0,0 @@-{-# LANGUAGE NamedFieldPuns #-}--module Language.OCaml.Parser.OpenStatement- ( openStatementP- ) where--import Data.Default-import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTHelper.Opn as Opn-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common (mkRHS, symbolRLoc, symbolDocs)--- import Language.OCaml.Parser.ExtAttributes-import Language.OCaml.Parser.ModLongident-import Language.OCaml.Parser.OverrideFlag-import Language.OCaml.Parser.PostItemAttributes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--openStatementP :: Parser Structure -> Parser (OpenDescription, ())-openStatementP structureP = do- try $ openT- override <- overrideFlagP- -- (ext, attrs) <- extAttributesP- i <- modLongidentP- a <- postItemAttributesP structureP- return (- Opn.mk- (def { override- , attrs = a -- FIXME: ++ attrs- , loc = symbolRLoc ()- , docs = symbolDocs ()- }- )- (mkRHS i 4)- , () -- FIXME: ext- )
− lib/Language/OCaml/Parser/Operator.hs
@@ -1,17 +0,0 @@-module Language.OCaml.Parser.Operator- ( operatorP- ) where--import Text.Megaparsec--import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--operatorP :: Parser String-operatorP = choice- [- -- TODO- bangT *> return "!"- , plusT *> return "+"- , minusT *> return "-"- ]
− lib/Language/OCaml/Parser/OptBar.hs
@@ -1,14 +0,0 @@-module Language.OCaml.Parser.OptBar- ( optBarP- ) where--import Text.Megaparsec--import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--optBarP :: Parser ()-optBarP = choice- [ barT *> return ()- , return ()- ]
− lib/Language/OCaml/Parser/OptPatternTypeConstraint.hs
@@ -1,16 +0,0 @@-module Language.OCaml.Parser.OptPatternTypeConstraint- ( optPatternTypeConstraintP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.CoreType-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--optPatternTypeConstraintP :: Parser (Maybe CoreType)-optPatternTypeConstraintP = choice- [ Just <$> (colonT *> coreTypeP)- , return Nothing- ]
− lib/Language/OCaml/Parser/OptSemi.hs
@@ -1,14 +0,0 @@-module Language.OCaml.Parser.OptSemi- ( optSemiP- ) where--import Text.Megaparsec--import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--optSemiP :: Parser ()-optSemiP = choice- [ semiT- , return ()- ]
− lib/Language/OCaml/Parser/OptTypeConstraint.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.OptTypeConstraint- ( optTypeConstraintP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.TypeConstraint-import Language.OCaml.Parser.Utils.Types--optTypeConstraintP :: Parser (Maybe (Maybe CoreType, Maybe CoreType))-optTypeConstraintP = choice- [ Just <$> typeConstraintP- , return Nothing- ]
− lib/Language/OCaml/Parser/OptionalTypeParameter.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.OptionalTypeParameter- ( optionalTypeParameterP- ) where--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.OptionalTypeVariable-import Language.OCaml.Parser.TypeVariance-import Language.OCaml.Parser.Utils.Types--optionalTypeParameterP :: Parser (CoreType, Variance)-optionalTypeParameterP = do- v <- typeVarianceP- t <- optionalTypeVariableP- return (t, v)
− lib/Language/OCaml/Parser/OptionalTypeParameters.hs
@@ -1,18 +0,0 @@-module Language.OCaml.Parser.OptionalTypeParameters- ( optionalTypeParametersP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.OptionalTypeParameter-import Language.OCaml.Parser.Utils.Types-import Language.OCaml.Parser.Utils.Utils--optionalTypeParametersP :: Parser [(CoreType, Variance)]-optionalTypeParametersP = choice- [ (: []) <$> optionalTypeParameterP- , parens (many optionalTypeParameterP)- , pure []- ]
− lib/Language/OCaml/Parser/OptionalTypeVariable.hs
@@ -1,12 +0,0 @@-module Language.OCaml.Parser.OptionalTypeVariable- ( optionalTypeVariableP- ) where---import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--optionalTypeVariableP :: Parser CoreType-optionalTypeVariableP = mktyp . PtypVar <$> (quoteT *> identP)
− lib/Language/OCaml/Parser/OverrideFlag.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.OverrideFlag- ( overrideFlagP- ) where--import Text.Megaparsec--import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--overrideFlagP :: Parser ASTTypes.OverrideFlag-overrideFlagP = choice- [ bangT *> return ASTTypes.Override- , return ASTTypes.Fresh- ]
− lib/Language/OCaml/Parser/Pattern.hs
@@ -1,40 +0,0 @@-module Language.OCaml.Parser.Pattern- ( patternP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.PatternGen-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.ValIdent-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--patternP :: Parser Pattern-patternP = choice- [ try $ parser <* notFollowedBy commaT- , mkpat . PpatTuple <$>- chainl1' parser (commaT *> (return $ flip (:))) (: [])- ]- where- parser = leftRecursive- [ patternGenP patternP- ]- -- pattern AS valIdent- [ do- try $ asT- i <- valIdentP- return $ \ x -> mkpat $ PpatAlias x (mkRHS i 3)- -- pattern COLONCOLON pattern- , do- try $ colonColonT- p2 <- patternP- return $ \ p1 -> mkpatCons (rhsLoc 2) (ghpat $ PpatTuple [p1, p2]) (symbolRLoc ())- , do- try $ barT- p <- patternP- return $ \ x -> mkpat $ PpatOr x p- -- TODO: bunch of other patterns- ]
− lib/Language/OCaml/Parser/PatternGen.hs
@@ -1,22 +0,0 @@-module Language.OCaml.Parser.PatternGen- ( patternGenP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.ConstrLongident-import Language.OCaml.Parser.SimplePattern-import Language.OCaml.Parser.Utils.Types--patternGenP :: Parser Pattern -> Parser Pattern-patternGenP patternP = choice- [ try $ do- i <- constrLongidentP- p <- patternP- return $ mkpat $ PpatConstruct (mkRHS i 1) (Just p)- , try $ simplePatternP'- ]- where- simplePatternP' = simplePatternP patternP
− lib/Language/OCaml/Parser/PatternNoExn.hs
@@ -1,34 +0,0 @@-module Language.OCaml.Parser.PatternNoExn- ( patternNoExnP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Pattern-import Language.OCaml.Parser.PatternGen-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.ValIdent-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--patternNoExnP :: Parser Pattern-patternNoExnP = leftRecursive- [ patternGenP patternP- ]- [ do- try asT- i <- valIdentP- return $ \ x -> mkpat $ PpatAlias x (mkRHS i 3)- -- TODO: patternNoExnCommaList- -- , do- -- try colonColonT- -- p <- patternP- -- return $ mkpatCons _ _- , do- try barT- p <- patternP- return $ \ x -> mkpat $ PpatOr x p- -- TODO: attribute- ]
− lib/Language/OCaml/Parser/PatternSemiList.hs
@@ -1,18 +0,0 @@-module Language.OCaml.Parser.PatternSemiList- ( patternSemiListP- ) where--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--patternSemiListP :: Parser Pattern -> Parser [Pattern]-patternSemiListP patternP = leftRecursive- [ (: []) <$> patternP- ]- [ do- semiT- e2 <- patternP- return $ \ e1 -> e2 : e1- ]
− lib/Language/OCaml/Parser/Payload.hs
@@ -1,13 +0,0 @@-module Language.OCaml.Parser.Payload- ( payloadP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Utils.Types--payloadP :: Parser Structure -> Parser Payload-payloadP structureP = choice- [ PStr <$> structureP- ]
− lib/Language/OCaml/Parser/PolyTypeNoAttr.hs
@@ -1,16 +0,0 @@-module Language.OCaml.Parser.PolyTypeNoAttr- ( polyTypeNoAttrP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.CoreType-import Language.OCaml.Parser.CoreTypeNoAttr-import Language.OCaml.Parser.Utils.Types--polyTypeNoAttrP :: Parser CoreType-polyTypeNoAttrP = choice- [ coreTypenoAttrP coreTypeP- -- TODO- ]
− lib/Language/OCaml/Parser/PostItemAttribute.hs
@@ -1,20 +0,0 @@-module Language.OCaml.Parser.PostItemAttribute- ( postItemAttributeP- ) where--import Text.Megaparsec--import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.AttrId-import Language.OCaml.Parser.Payload-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--postItemAttributeP :: Parser Structure -> Parser (ASTTypes.Loc String, Payload)-postItemAttributeP structureP = do- try $ lBracketAtAtT- i <- attrIdP- p <- payloadP structureP- rBracketT- return (i, p)
− lib/Language/OCaml/Parser/PostItemAttributes.hs
@@ -1,13 +0,0 @@-module Language.OCaml.Parser.PostItemAttributes- ( postItemAttributesP- ) where--import Text.Megaparsec--import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.PostItemAttribute-import Language.OCaml.Parser.Utils.Types--postItemAttributesP :: Parser Structure -> Parser [(ASTTypes.Loc String, Payload)]-postItemAttributesP structureP = many (postItemAttributeP structureP)
− lib/Language/OCaml/Parser/PrivateFlag.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.PrivateFlag- ( privateFlagP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--privateFlagP :: Parser PrivateFlag-privateFlagP = choice- [ privateT *> return Private- , return Public- ]
− lib/Language/OCaml/Parser/RecFlag.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.RecFlag- ( recFlagP- ) where--import Text.Megaparsec--import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--recFlagP :: Parser ASTTypes.RecFlag-recFlagP = choice- [ recT *> return ASTTypes.Recursive- , return ASTTypes.NonRecursive- ]
− lib/Language/OCaml/Parser/RecordExpr.hs
@@ -1,28 +0,0 @@-module Language.OCaml.Parser.RecordExpr- ( recordExprP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.LblExprList-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--recordExprP ::- Parser Expression -> Parser Expression -> Parser (Maybe Expression, [(Loc Longident, Expression)])-recordExprP exprP simpleExprP = choice- [ do- e <- try $ do- e <- simpleExprP- withT- return e- l <- lblExprListP'- return (Just e, l)- , do- l <- lblExprListP'- return (Nothing, l)- ]- where- lblExprListP' = lblExprListP exprP
− lib/Language/OCaml/Parser/SeqExpr.hs
@@ -1,30 +0,0 @@-module Language.OCaml.Parser.SeqExpr- ( seqExprP- ) where--import Data.Default-import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTHelper.Exp as Exp hiding (try)-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Expr-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--seqExprP :: Parser Structure -> Parser Expression-seqExprP structureP = choice- [ try $ do- e <- exprP'- semiT- s <- seqExprP'- return $ Exp.mk def (PexpSequence e s)- , try $ do- e <- exprP'- semiT- return e- , try $ exprP'- -- TODO: percent- ]- where- exprP' = exprP structureP seqExprP'- seqExprP' = seqExprP structureP
− lib/Language/OCaml/Parser/SigExceptionDeclaration.hs
@@ -1,39 +0,0 @@-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE NamedFieldPuns #-}--module Language.OCaml.Parser.SigExceptionDeclaration- ( sigExceptionDeclarationP- ) where--import Data.Default--import Language.OCaml.Definitions.Parsing.ASTHelper.Te as Te-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.ConstrIdent-import Language.OCaml.Parser.CoreType-import Language.OCaml.Parser.GeneralizedConstructorArguments-import Language.OCaml.Parser.PostItemAttributes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--sigExceptionDeclarationP :: Parser Structure -> Parser (ExtensionConstructor, ())-sigExceptionDeclarationP structureP = do- exceptionT- -- TODO: extAttributes- i <- constrIdentP- (args, res) <- generalizedConstructorArgumentsP coreTypeP- -- a <- attributesP- attrs <- postItemAttributesP structureP- return- ( Te.decl- (def { args- , attrs = attrs {- ++ a -} {- loc and docs -}- , loc = symbolRLoc ()- , docs = symbolDocs ()- }- )- res- (mkRHS i (3 :: Int))- , ()- )
− lib/Language/OCaml/Parser/SimpleCoreType.hs
@@ -1,21 +0,0 @@-module Language.OCaml.Parser.SimpleCoreType- ( simpleCoreTypeP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.CoreTypeCommaList-import Language.OCaml.Parser.SimpleCoreType2-import Language.OCaml.Parser.Utils.Types-import Language.OCaml.Parser.Utils.Utils--simpleCoreTypeP :: Parser CoreType -> Parser CoreType-simpleCoreTypeP coreTypeP = choice- [ try $ simpleCoreType2P coreTypeP- , do- l <- parens $ coreTypeCommaListP coreTypeP- case l of- [sty] -> return sty- _ -> fail "Parse error"- ]
− lib/Language/OCaml/Parser/SimpleCoreType2.hs
@@ -1,38 +0,0 @@-module Language.OCaml.Parser.SimpleCoreType2- ( simpleCoreType2P- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.CoreTypeCommaList-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.TypeLongident-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--simpleCoreType2P :: Parser CoreType -> Parser CoreType-simpleCoreType2P coreTypeP = leftRecursive- [ choice- [ mktyp . PtypVar <$> try (quoteT *> identP)- , mktyp . const PtypAny <$> underscoreT- , try $ do- t <- typeLongidentP- return $ mktyp $ PtypConstr (mkRHS t 1) []- , do- lParenT- l <- coreTypeCommaListP coreTypeP- rParenT- i <- typeLongidentP- return . mktyp $ PtypConstr (mkRHS i 4)(reverse l)- -- , do- -- a <- chainl1' simpleCoreType2P _ _ -- (return $ \ a b -> PtypConstr (mkRHS b 2) [a])- -- t <- typeLongidentP- -- return $ mkTyp $ PtypConstr (mkRHS t 2) [a]- ]- ]- [ do- t <- typeLongidentP- return $ \ x -> mktyp $ PtypConstr (mkRHS t 2) [x]- ]
− lib/Language/OCaml/Parser/SimpleCoreTypeOrTuple.hs
@@ -1,26 +0,0 @@-module Language.OCaml.Parser.SimpleCoreTypeOrTuple- ( simpleCoreTypeOrTupleP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.CoreTypeList-import Language.OCaml.Parser.SimpleCoreType-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--simpleCoreTypeOrTupleP :: Parser CoreType -> Parser CoreType-simpleCoreTypeOrTupleP coreTypeP = choice- [ do- t <- try $ do- t <- simpleCoreTypeP'- starT- return t- l <- coreTypelistP coreTypeP- return . mktyp . PtypTuple $ t : reverse l- , simpleCoreTypeP'- ]- where- simpleCoreTypeP' = simpleCoreTypeP coreTypeP
− lib/Language/OCaml/Parser/SimpleDelimitedPattern.hs
@@ -1,45 +0,0 @@-module Language.OCaml.Parser.SimpleDelimitedPattern- ( simpleDelimitedPatternP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.LblPatternList-import Language.OCaml.Parser.OptSemi-import Language.OCaml.Parser.PatternSemiList-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--simpleDelimitedPatternP :: Parser Pattern -> Parser Pattern-simpleDelimitedPatternP patternP = choice- [ do- (fields, closed) <- try $ do- lBraceT- lblPatternListP patternP- rBraceT- return $ mkpat $ PpatRecord fields closed- , do- l <- try $ do- lBracketT- l <- patternSemiListP patternP- optSemiP- return l- rBracketT- return $ mktailpat (rhsLoc 4) (reverse l)- , do- l <- try $ do- lBracketBarT- l <- patternSemiListP'- optSemiP- return l- barRBracketT- return $ mkpat $ PpatArray (reverse l)- , do- lBracketBarT- barRBracketT- return $ mkpat $ PpatArray []- ]- where- patternSemiListP' = patternSemiListP patternP
− lib/Language/OCaml/Parser/SimpleExpr.hs
@@ -1,50 +0,0 @@-module Language.OCaml.Parser.SimpleExpr- ( simpleExprP- ) where--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Constant-import Language.OCaml.Parser.ConstrLongident-import Language.OCaml.Parser.ExprSemiList-import Language.OCaml.Parser.LabelLongident-import Language.OCaml.Parser.OptSemi-import Language.OCaml.Parser.RecordExpr-import Language.OCaml.Parser.ValLongident-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--simpleExprP :: Parser Expression -> Parser Expression -> Parser Expression-simpleExprP seqExprP exprP = leftRecursive- [ do- i <- valLongidentP- return . mkexp $ PexpIdent (mkRHS i 1)- , mkexp . PexpConstant <$> constantP- , do- i <- constrLongidentP- return $ mkexp $ PexpConstruct (mkRHS i 1) Nothing- , do- lParenT- e <- seqExprP- rParenT- return $ relocExp e- , do- lBracketT- l <- exprSemiListP exprP- optSemiP- rBracketT- return $ relocExp $ mktailexp (rhsLoc 4) (reverse l)- , do- lBraceT- (exten, fields) <- recordExprP exprP simpleExprP'- rBraceT- return $ mkexp $ PexpRecord fields exten- ]- [ do- dotT- i <- labelLongidentP- return $ \ x -> mkexp $ PexpField x (mkRHS i 3)- ]- where- simpleExprP' = simpleExprP seqExprP exprP
− lib/Language/OCaml/Parser/SimpleLabeledExprList.hs
@@ -1,16 +0,0 @@-module Language.OCaml.Parser.SimpleLabeledExprList- ( simpleLabeledExprListP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.LabeledSimpleExpr-import Language.OCaml.Parser.Utils.Types---- NOTE: the OCaml version builds the list backwards for efficiency reasons--- We call `reverse` to match it, even though it is inefficient.--- We could update this once the whole code base is ready. #FIXME-simpleLabeledExprListP :: Parser Expression -> Parser Expression -> Parser [(ArgLabel, Expression)]-simpleLabeledExprListP seqExprP exprP = reverse <$> many (labeledSimpleExprP seqExprP exprP)
− lib/Language/OCaml/Parser/SimplePattern.hs
@@ -1,21 +0,0 @@-module Language.OCaml.Parser.SimplePattern- ( simplePatternP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.SimplePatternNotIdent-import Language.OCaml.Parser.ValIdent-import Language.OCaml.Parser.Utils.Types--simplePatternP :: Parser Pattern -> Parser Pattern-simplePatternP patternP = choice- [ do- i <- valIdentP- return $ mkpat $ PpatVar $ mkRHS i 1- , simplePatternNotIdentP'- ]- where- simplePatternNotIdentP' = simplePatternNotIdentP patternP
− lib/Language/OCaml/Parser/SimplePatternNotIdent.hs
@@ -1,33 +0,0 @@-module Language.OCaml.Parser.SimplePatternNotIdent- ( simplePatternNotIdentP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.ConstrLongident-import Language.OCaml.Parser.SimpleDelimitedPattern-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--simplePatternNotIdentP :: Parser Pattern -> Parser Pattern-simplePatternNotIdentP patternP = choice- [ do- underscoreT- return $ mkpat $ PpatAny- -- TODO: signed constants- , do- i <- constrLongidentP- return $ mkpat $ PpatConstruct (mkRHS i 1) Nothing- -- TODO: name_tag- -- TODO: HASH- , simpleDelimitedPatternP'- , do- lParenT- p <- patternP- rParenT- return $ relocPat p- ]- where- simpleDelimitedPatternP' = simpleDelimitedPatternP patternP
− lib/Language/OCaml/Parser/SingleAttrId.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.SingleAttrId- ( singleAttrIdP- ) where--import Text.Megaparsec--import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--singleAttrIdP :: Parser String-singleAttrIdP = choice- [ lIdentT- , uIdentT- -- TODO- ]
− lib/Language/OCaml/Parser/StrExceptionDeclaration.hs
@@ -1,15 +0,0 @@-module Language.OCaml.Parser.StrExceptionDeclaration- ( strExceptionDeclarationP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.SigExceptionDeclaration-import Language.OCaml.Parser.Utils.Types--strExceptionDeclarationP :: Parser Structure -> Parser (ExtensionConstructor, ())-strExceptionDeclarationP structureP = choice- [ sigExceptionDeclarationP structureP- -- TODO- ]
− lib/Language/OCaml/Parser/StrictBinding.hs
@@ -1,24 +0,0 @@-module Language.OCaml.Parser.StrictBinding- ( strictBindingP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.LabeledSimplePattern-import Language.OCaml.Parser.Pattern-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--strictBindingP :: Parser Expression -> Parser Expression -> Parser Expression-strictBindingP seqExprP funBindingP = choice- [ do- try $ equalT- seqExprP- , do- (l, o, p) <- labeledSimplePatternP patternP- b <- funBindingP- return $ ghexp $ PexpFun l o p b- -- TODO- ]
− lib/Language/OCaml/Parser/Structure.hs
@@ -1,39 +0,0 @@-module Language.OCaml.Parser.Structure- ( structureP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.PostItemAttributes-import Language.OCaml.Parser.SeqExpr-import Language.OCaml.Parser.StructureItem-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Utils-import Language.OCaml.Parser.Utils.Types--structureP :: Parser Structure-structureP = ocamlSpace *> choice- [ do- e <- seqExprP structureP- a <- postItemAttributesP structureP- s <- structureTailP- return $ textStr 1 ++ mkstrexp e a : s- , structureTailP- ]- where- structureTailP :: Parser [StructureItem]- structureTailP = choice- [ do- (i, t) <- try $ do- i <- structureItemP structureP- t <- structureTailP- return (i, t)- return $ textStr 1 ++ i : t- , do- try $ semiSemiT- s <- structureP- return $ textStr 1 ++ s- , ocamlSpace *> return []- ]
− lib/Language/OCaml/Parser/StructureItem.hs
@@ -1,32 +0,0 @@-module Language.OCaml.Parser.StructureItem- ( structureItemP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.LetBindings-import Language.OCaml.Parser.ModuleBinding-import Language.OCaml.Parser.OpenStatement-import Language.OCaml.Parser.SeqExpr-import Language.OCaml.Parser.StrExceptionDeclaration-import Language.OCaml.Parser.TypeDeclarations-import Language.OCaml.Parser.Utils.Types--structureItemP :: Parser Structure -> Parser StructureItem-structureItemP structureP = choice- [ valOfLetBindings <$> letBindingsP structureP (seqExprP structureP)- , do- (nr, l) <- typeDeclarationsP structureP- return $ mkstrExt (PstrType nr (reverse l)) Nothing -- FIXME: not Nothing- , do- (l, _ext) <- strExceptionDeclarationP structureP- return $ mkstrExt (PstrException l) Nothing -- FIXME- , do- (body, _ext) <- openStatementP structureP- return $ mkstrExt (PstrOpen body) Nothing -- FIXME- , do- (body, _ext) <- moduleBindingP structureP- return $ mkstrExt (PstrModule body) Nothing -- FIXME- ]
− lib/Language/OCaml/Parser/Tokens.hs
@@ -1,322 +0,0 @@-module Language.OCaml.Parser.Tokens- ( andT- , asT- , atT- , bangT- , barT- , barRBracketT- , caretT- , charT- , colonT- , colonColonT- , colonGreaterT- , commaT- , dotT- , elseT- , equalT- , exceptionT- , falseT- , funT- , functionT- , greaterT- , ifT- , inT- , intT- , lBraceT- , lBracketT- , lBracketAtT- , lBracketAtAtT- , lBracketBarT- , lIdentT- , lParenT- , letT- , matchT- , minusT- , minusGreaterT- , moduleT- , mutableT- , nonrecT- , ofT- , openT- , plusT- , privateT- , quoteT- , rBraceT- , rBracketT- , rParenT- , recT- , semiT- , semiSemiT- , starT- , stringT- , thenT- , trueT- , typeT- , uIdentT- , underscoreT- , whenT- , withT- ) where--import Data.Char-import Text.Megaparsec-import Text.Megaparsec.Char--import Language.OCaml.Parser.Utils.Utils-import Language.OCaml.Parser.Utils.Types--andT :: Parser ()-andT = rword "and"--asT :: Parser ()-asT = rword "as"--atT :: Parser ()-atT = symbol "@"--bangT :: Parser ()-bangT = symbol "!"--barT :: Parser ()-barT = symbol "|"--barRBracketT :: Parser ()-barRBracketT = symbol "|]"--binDigitChar :: Parser Char-binDigitChar = char '0' <|> char '1'--binLiteralP :: Parser String-binLiteralP = do -- WARNING: do not add `lexeme` here- _ <- char '0'- _ <- char 'b' <|> char 'B'- h <- binDigitChar- t <- many (binDigitChar <|> char '_')- return $ h : t--caretT :: Parser ()-caretT = symbol "^"--charT :: Parser Char-charT = do- symbol "'"- c <- satisfy (not . (`elem` ['\\', '\'', '\010', '\013']))- symbol "'"- return c--colonT :: Parser ()-colonT = symbol ":"--colonColonT :: Parser ()-colonColonT = symbol "::"--colonGreaterT :: Parser ()-colonGreaterT = symbol ":>"--commaT :: Parser ()-commaT = symbol ","--decimalLiteralP :: Parser String-decimalLiteralP = do -- WARNING: do not add `lexeme` here- h <- digitChar- t <- many (digitChar <|> char '_')- return $ h : t--dotT :: Parser ()-dotT = symbol "."--elseT :: Parser ()-elseT = rword "else"--equalT :: Parser ()-equalT = symbol "="--falseT :: Parser ()-falseT = rword "false"--funT :: Parser ()-funT = rword "fun"--functionT :: Parser ()-functionT = rword "function"--ifT :: Parser ()-ifT = rword "if"--exceptionT :: Parser ()-exceptionT = rword "exception"--greaterT :: Parser ()-greaterT = symbol ">"--hexLiteralP :: Parser String-hexLiteralP = do -- WARNING: do not add `lexeme` here- _ <- char '0'- _ <- char 'x' <|> char 'X'- h <- hexDigitChar- t <- many (hexDigitChar <|> char '_')- return $ h : t--intLiteralP :: Parser String-intLiteralP = choice- [ decimalLiteralP- , hexLiteralP- , octLiteralP- , binLiteralP- ]--inT :: Parser ()-inT = rword "in"--intT :: Parser (String, Maybe Char)-intT = lexeme $ do- l <- intLiteralP- m <- choice- [ Just <$> literalModifierP- , return Nothing- ]- return (l, m)--isBetween :: Char -> Char -> Char -> Bool-isBetween cmin c cmax = (vmin <= v && v <= vmax)- where- vmin = conv cmin- v = conv c- vmax = conv cmax- conv = ord--isModifier :: Char -> Bool-isModifier c = isBetween 'G' c 'Z' || isBetween 'g' c 'z'--literalModifierP :: Parser Char-literalModifierP = satisfy isModifier--identCharT :: Parser Char-identCharT = choice- [ upperChar- , lowerChar- , char '_'- , char '\''- , digitChar- ]--lBraceT :: Parser ()-lBraceT = symbol "{"--lBracketT :: Parser ()-lBracketT = symbol "["--lBracketAtT :: Parser ()-lBracketAtT = symbol "[@"--lBracketAtAtT :: Parser ()-lBracketAtAtT = symbol "[@@"--lBracketBarT :: Parser ()-lBracketBarT = symbol "[|"--lIdentT :: Parser String-lIdentT = identifier $ do- c <- lowerChar- cs <- many identCharT- return $ c : cs--lParenT :: Parser ()-lParenT = symbol "("--letT :: Parser ()-letT = rword "let"--matchT :: Parser ()-matchT = rword "match"--minusT :: Parser ()-minusT = symbol "-"--minusGreaterT :: Parser ()-minusGreaterT = symbol "->"--moduleT :: Parser ()-moduleT = rword "module"--mutableT :: Parser ()-mutableT = rword "mutable"--nonrecT :: Parser ()-nonrecT = rword "nonrec"--octLiteralP :: Parser String-octLiteralP = do -- WARNING: do not add `lexeme` here- _ <- char '0'- _ <- char 'o' <|> char 'O'- h <- octDigitChar- t <- many (octDigitChar <|> char '_')- return $ h : t--ofT :: Parser ()-ofT = rword "of"--openT :: Parser ()-openT = rword "open"--plusT :: Parser ()-plusT = symbol "+"--privateT :: Parser ()-privateT = rword "private"--quoteT :: Parser ()-quoteT = symbol "'"--rBraceT :: Parser ()-rBraceT = symbol "}"--rBracketT :: Parser ()-rBracketT = symbol "]"--rParenT :: Parser ()-rParenT = symbol ")"--recT :: Parser ()-recT = rword "rec"--semiT :: Parser ()-semiT = symbol ";"--semiSemiT :: Parser ()-semiSemiT = symbol ";;"--starT :: Parser ()-starT = symbol "*"---- FIXME: real strings have nesting comments and escape characters-stringT :: Parser (String, Maybe String)-stringT = lexeme $ do- _ <- char '"'- s <- many $ satisfy ((/=) '"')- _ <- char '"'- return (s, Nothing)--thenT :: Parser ()-thenT = rword "then"--trueT :: Parser ()-trueT = rword "true"--typeT :: Parser ()-typeT = rword "type"--uIdentT :: Parser String-uIdentT = identifier $ do- c <- upperChar- cs <- many identCharT- return $ c : cs--underscoreT :: Parser ()-underscoreT = symbol "_"--whenT :: Parser ()-whenT = rword "when"--withT :: Parser ()-withT = rword "with"
− lib/Language/OCaml/Parser/TypeConstraint.hs
@@ -1,30 +0,0 @@-module Language.OCaml.Parser.TypeConstraint- ( typeConstraintP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.CoreType-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--typeConstraintP :: Parser (Maybe CoreType, Maybe CoreType)-typeConstraintP = choice- [ do- t1 <- try $ do- colonT- t1 <- coreTypeP- colonGreaterT- return t1- t2 <- coreTypeP- return (Just t1, Just t2)- , try $ do- colonT- t <- coreTypeP- return (Just t, Nothing)- , do- try $ colonGreaterT- t <- coreTypeP- return (Nothing, Just t)- ]
− lib/Language/OCaml/Parser/TypeDeclaration.hs
@@ -1,34 +0,0 @@-{-# LANGUAGE DisambiguateRecordFields #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE NamedFieldPuns #-}--module Language.OCaml.Parser.TypeDeclaration- ( typeDeclarationP- ) where--import Data.Default-import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTHelper.Type as Type-import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.NonRecFlag-import Language.OCaml.Parser.OptionalTypeParameters-import Language.OCaml.Parser.PostItemAttributes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.TypeKind-import Language.OCaml.Parser.Utils.Types--typeDeclarationP :: Parser Structure -> Parser (ASTTypes.RecFlag, TypeDeclaration)-typeDeclarationP structureP = do- try $ typeT- -- TODO: extAttributes- nonrecFlag <- nonrecFlagP- params <- optionalTypeParametersP- n <- lIdentT- (kind, priv, manifest) <- typeKindP structureP- -- TODO: constraints- attrs <- postItemAttributesP structureP- let ty = Type.mk (def { attrs, kind, params, priv }) manifest (mkRHS n 5)- return (nonrecFlag, ty)
− lib/Language/OCaml/Parser/TypeDeclarations.hs
@@ -1,25 +0,0 @@-module Language.OCaml.Parser.TypeDeclarations- ( typeDeclarationsP- ) where--import qualified Language.OCaml.Definitions.Parsing.ASTTypes as ASTTypes-import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.AndTypeDeclaration-import Language.OCaml.Parser.TypeDeclaration-import Language.OCaml.Parser.Utils.Combinators-import Language.OCaml.Parser.Utils.Types--typeDeclarationsP ::- Parser Structure -> Parser (ASTTypes.RecFlag, [TypeDeclaration])-typeDeclarationsP structureP = leftRecursive- [ do- (nonrecFlag, ty) <- typeDeclarationP'- return $ (nonrecFlag, [ty])- ]- [ do- ty <- andTypeDeclarationP'- return $ \ (nonrecFlag, tys) -> (nonrecFlag, ty : tys)- ]- where- typeDeclarationP' = typeDeclarationP structureP- andTypeDeclarationP' = andTypeDeclarationP structureP
− lib/Language/OCaml/Parser/TypeKind.hs
@@ -1,40 +0,0 @@-module Language.OCaml.Parser.TypeKind- ( typeKindP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.ConstructorDeclarations-import Language.OCaml.Parser.CoreType-import Language.OCaml.Parser.LabelDeclarations-import Language.OCaml.Parser.PrivateFlag-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--typeKindP :: Parser Structure -> Parser (TypeKind, PrivateFlag, Maybe CoreType)-typeKindP structureP = choice- [ do- t <- try $ do- equalT- coreTypeP- return (PtypeAbstract, Public, Just t)- , do- cs <- try $ do- equalT- constructorDeclarationsP'- return (PtypeVariant (reverse cs), Private, Nothing)- , do- priv <- try $ do- equalT- priv <- privateFlagP- lBraceT- return priv- labels <- labelDeclarationsP- rBraceT- return (PtypeRecord labels, priv, Nothing)- -- FIXME: commenting this out as it helps with debugging, but this is a valid parse of type kind- -- , return (PtypeAbstract, Public, Nothing)- ]- where- constructorDeclarationsP' = constructorDeclarationsP structureP coreTypeP
− lib/Language/OCaml/Parser/TypeLongident.hs
@@ -1,20 +0,0 @@-module Language.OCaml.Parser.TypeLongident- ( typeLongidentP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.ModExtLongident-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--typeLongidentP :: Parser Longident-typeLongidentP = choice- [ Lident <$> lIdentT- , do- p <- modExtLongidentP- dotT- i <- lIdentT- return $ Ldot p i- ]
− lib/Language/OCaml/Parser/TypeVariable.hs
@@ -1,12 +0,0 @@-module Language.OCaml.Parser.TypeVariable- ( typeVariableP- ) where---import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.Common-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--typeVariableP :: Parser CoreType-typeVariableP = mktyp . PtypVar <$> (quoteT *> identP)
− lib/Language/OCaml/Parser/TypeVariance.hs
@@ -1,16 +0,0 @@-module Language.OCaml.Parser.TypeVariance- ( typeVarianceP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ASTTypes-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--typeVarianceP :: Parser Variance-typeVarianceP = choice- [ plusT *> pure Covariant- , minusT *> pure Contravariant- , pure Invariant- ]
− lib/Language/OCaml/Parser/Utils/Combinators.hs
@@ -1,77 +0,0 @@-module Language.OCaml.Parser.Utils.Combinators- ( chainl1- , chainl1'- , chainl1try- , chainl1try'- , leftRecursive- ) where--import Control.Applicative-import Text.Megaparsec--import Language.OCaml.Parser.Utils.Types--{---This combinator is necessary because we want to parse succesfully even when-the `op` is not part of the chain.--For instance, in OCaml, a modLongident is a sequence of `Foo.Bar.Baz` and must-be parsed as a chain. However, when presented with `Foo.Bar.baz`, we'd like the-chain to capture `Foo.Bar` and ignore the `.baz`.---}-chainl1try' :: Parser a -> Parser (b -> a -> b) -> (a -> b) -> Parser b-chainl1try' p op bc = p >>= rest . bc- where- rest x = tryOp x <|> return x- tryOp x = try $ do- f <- op- y <- p- rest (f x y)--chainl1try :: Parser b -> Parser (b -> b -> b) -> Parser b-chainl1try p op = chainl1try' p op id--chainl1' :: (Alternative m, Monad m) => m a -> m (b -> a -> b) -> (a -> b) -> m b-chainl1' p op bc = p >>= rest . bc- where- rest x = do { f <- op ; y <- p ; rest (f x y) } <|> return x--chainl1 :: (Alternative m, Monad m) => m a -> m (a -> a -> a) -> m a-chainl1 p op = chainl1' p op id--{---This applies the procedure of turning a left-recursive grammar into a-non-left-recursive one. Essentially, when wanting to write the grammar:--A ::=-| A B { foo A B }-| C { bar C }--One instead writes the following:--A' ::=-| C R { R (bar C) }--R ::=-| B R { \ A -> R (foo A B) }-| {-empty-} { id }--The two arguments to `leftRecursive` are the grammars for A' and R (except the-last line of R is not needed, but added by the combinator).---}-leftRecursive :: (Monad m, Alternative m) => [m a] -> [m (a -> a)] -> m a-leftRecursive prefixes suffixes = choice $ map patchPrefix prefixes- where- patchPrefix prefixP = do- p <- prefixP- r <- rest- return $ r p- patchSuffix suffixP = do- s <- suffixP- r <- rest- return $ r . s- rest = choice $ map patchSuffix suffixes ++ [ return id ]
− lib/Language/OCaml/Parser/Utils/Types.hs
@@ -1,8 +0,0 @@-module Language.OCaml.Parser.Utils.Types- ( Parser- ) where--import Data.Void-import Text.Megaparsec--type Parser = Parsec Void String
− lib/Language/OCaml/Parser/Utils/Utils.hs
@@ -1,115 +0,0 @@-module Language.OCaml.Parser.Utils.Utils- -- , checkIdentifier- ( identifier- , lexeme- , ocamlSpace- , parens- , rword- , symbol- ) where--import Data.Functor-import Text.Megaparsec-import Text.Megaparsec.Char-import qualified Text.Megaparsec.Char.Lexer as L-import Text.Printf--import Language.OCaml.Parser.Utils.Types--checkIdentifier :: String -> Parser String-checkIdentifier c =- if c `elem` reservedWords- then fail $ printf "keyword %s cannot be an identifier" (show c)- else return c--identifier :: Parser String -> Parser String-identifier p = (lexeme . try) (p >>= checkIdentifier)---- identifier :: Parser String--- identifier = (lexeme . try) (p >>= checkIdentifier)--- where--- p = (:) <$> letterChar <*> many (alphaNumChar <|> char '_')--ocamlSpace :: Parser ()-ocamlSpace = L.space (void spaceChar) lineCmnt blockCmnt- where- lineCmnt = L.skipLineComment "//"- blockCmnt = L.skipBlockComment "(*" "*)"--lexeme :: Parser a -> Parser a-lexeme = L.lexeme ocamlSpace--parens :: Parser a -> Parser a-parens = between (symbol "(") (symbol ")")--rword :: String -> Parser ()-rword w =- if w `elem` reservedWords- then string w *> notFollowedBy alphaNumChar *> ocamlSpace- else error- $ "The following word must be added to reservedWords in Language.OCaml.Parser.Utils.Utils: "- ++ w--symbol :: String -> Parser ()-symbol = void . L.symbol ocamlSpace--reservedWords :: [String] -- list of reserved words-reservedWords =- [ "and"- , "as"- , "assert"- , "begin"- , "class"- , "constraint"- , "do"- , "done"- , "downto"- , "else"- , "end"- , "exception"- , "external"- , "false"- , "for"- , "fun"- , "function"- , "functor"- , "if"- , "in"- , "include"- , "inherit"- , "initializer"- , "lazy"- , "let"- , "match"- , "method"- , "module"- , "mutable"- , "new"- , "nonrec"- , "object"- , "of"- , "open"- , "or"- -- , "parser"- , "private"- , "rec"- , "sig"- , "struct"- , "then"- , "to"- , "true"- , "try"- , "type"- , "val"- , "virtual"- , "when"- , "while"- , "with"- , "lor"- , "lxor"- , "mod"- , "land"- , "lsl"- , "lsr"- , "asr"- ]
− lib/Language/OCaml/Parser/ValIdent.hs
@@ -1,20 +0,0 @@-module Language.OCaml.Parser.ValIdent- ( valIdentP- ) where--import Text.Megaparsec--import Language.OCaml.Parser.Operator-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types--valIdentP :: Parser String-valIdentP = choice- [ lIdentT- , do- o <- try $ do- lParenT- operatorP- rParenT- return o- ]
− lib/Language/OCaml/Parser/ValLongident.hs
@@ -1,23 +0,0 @@-module Language.OCaml.Parser.ValLongident- ( valLongidentP- ) where--import Text.Megaparsec--import Language.OCaml.Definitions.Parsing.ParseTree-import Language.OCaml.Parser.ModLongident-import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.Utils.Types-import Language.OCaml.Parser.ValIdent--valLongidentP :: Parser Longident-valLongidentP = choice- [ Lident <$> valIdentP- , do- l <- try $ do- l <- modLongidentP- dotT- return l- i <- valIdentP- return $ Ldot l i- ]
lib/Language/OCaml/PrettyPrinter.hs view
@@ -1,10 +1,24 @@ module Language.OCaml.PrettyPrinter ( pretty+ , payloadPP , structurePP+ , structureItemPP ) where -import Data.Text.Prettyprint.Doc (pretty)+import Data.Text.Prettyprint.Doc (Doc, pretty) -import Language.OCaml.PrettyPrinter.Payload ()-import Language.OCaml.PrettyPrinter.Structure-import Language.OCaml.PrettyPrinter.StructureItem ()+import Language.OCaml.Definitions.Parsing.ParseTree+import qualified Language.OCaml.PrettyPrinter.Payload as Payload+import qualified Language.OCaml.PrettyPrinter.Structure as Structure+import qualified Language.OCaml.PrettyPrinter.StructureItem as StructureItem++-- tying some knots++payloadPP :: Payload -> Doc a+payloadPP = Payload.payloadPP++structureItemPP :: StructureItem -> Doc a+structureItemPP = StructureItem.structureItemPP++structurePP :: Structure -> Doc a+structurePP = Structure.structurePP
lib/Language/OCaml/PrettyPrinter/Structure.hs view
@@ -9,5 +9,5 @@ import Language.OCaml.Definitions.Parsing.ParseTree import Language.OCaml.PrettyPrinter.StructureItem () -structurePP :: (Pretty Payload) => Structure -> Doc a+structurePP :: Pretty Payload => Structure -> Doc a structurePP = vcat . map pretty
− test/Language/OCaml/Parser/Common/Test.hs
@@ -1,52 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE QuasiQuotes #-}--module Language.OCaml.Parser.Common.Test- ( test- , unitTests- ) where--import Test.Tasty--import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils--constrIdentTests :: [String]-constrIdentTests =- [ "A"- , "Ab"- , "AB"- , "[]"- , "false"- , "true"- , "A "- , "Ab "- , "AB "- , "[] "- , "false "- , "true "- ]--identTests :: [String]-identTests =- [ "A"- , "Ab"- , "AB"- , "a"- , "aB"- , "ab"- , "A "- , "Ab "- , "AB "- , "a "- , "aB "- , "ab "- ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Common" $ []- ++ map (mkParsingTest "constrIdentP" constrIdentP) constrIdentTests- ++ map (mkParsingTest "identP" identP) identTests--test :: IO ()-test = defaultMain unitTests
test/Language/OCaml/Parser/Constant/Test.hs view
@@ -1,16 +1,8 @@-{-# LANGUAGE OverloadedStrings #-}- module Language.OCaml.Parser.Constant.Test- ( test- , testStrings- , unitTests+ ( testStrings ) where -import Test.Tasty--import Language.OCaml.Parser.Internal import qualified Language.OCaml.Parser.Int.Test as Int-import Language.OCaml.Parser.TestUtils testStrings :: [String] testStrings = []@@ -18,10 +10,3 @@ -- TODO: CHAR -- TODO: STRING -- TODO: FLOAT--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Constant" $ []- ++ map (mkParsingTest "valLongIdentP" valLongidentP) testStrings--test :: IO ()-test = defaultMain unitTests
test/Language/OCaml/Parser/ConstrLongident/Test.hs view
@@ -1,17 +1,12 @@ {-# LANGUAGE QuasiQuotes #-} module Language.OCaml.Parser.ConstrLongident.Test- ( test- , testStrings- , unitTests+ ( testStrings ) where -import Data.String.Interpolate-import Test.Tasty+import Data.String.Interpolate -import Language.OCaml.Parser.Internal import qualified Language.OCaml.Parser.ModLongident.Test as ModLongident-import Language.OCaml.Parser.TestUtils testStrings :: [String] testStrings = []@@ -25,10 +20,3 @@ , "false" , "true" ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.ConstrLongident" $ []- ++ map (mkParsingTest "constrLongidentP" constrLongidentP) testStrings--test :: IO ()-test = defaultMain unitTests
+ test/Language/OCaml/Parser/CoreType/Test.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE QuasiQuotes #-}++module Language.OCaml.Parser.CoreType.Test+ ( testStrings+ ) where++-- import Data.String.Interpolate++import qualified Language.OCaml.Parser.CoreTypeNoAttr.Test as CoreTypeNoAttr++testStrings :: [String]+testStrings = []+ ++ coreTypeNoAttr+ -- TODO+ where+ coreTypeNoAttr = CoreTypeNoAttr.testStrings
+ test/Language/OCaml/Parser/CoreType2/Test.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE QuasiQuotes #-}++module Language.OCaml.Parser.CoreType2.Test+ ( testStrings+ ) where++-- import Data.String.Interpolate++import qualified Language.OCaml.Parser.SimpleCoreTypeOrTuple.Test as SimpleCoreTypeOrTuple++testStrings :: [String]+testStrings = []+ ++ simpleCoreTypeOrTuple+ -- TODO+ where+ simpleCoreTypeOrTuple = SimpleCoreTypeOrTuple.testStrings
+ test/Language/OCaml/Parser/CoreTypeNoAttr/Test.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE QuasiQuotes #-}++module Language.OCaml.Parser.CoreTypeNoAttr.Test+ ( testStrings+ ) where++import Data.String.Interpolate+import Prelude hiding (id)++import qualified Language.OCaml.Parser.CoreType2.Test as CoreType2+import qualified Language.OCaml.Parser.Ident.Test as Ident++testStrings :: [String]+testStrings = []+ ++ coreType2+ ++ [ [i| #{ct2} as '#{id} |]+ | ct2 <- coreType2+ , id <- ident+ ]+ where+ coreType2 = CoreType2.testStrings+ ident = Ident.testStrings
test/Language/OCaml/Parser/Generator/Expr/Test.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE QuasiQuotes #-}- module Language.OCaml.Parser.Generator.Expr.Test ( test , unitTests@@ -13,7 +11,7 @@ unitTests :: TestTree unitTests = testGroup "Language.OCaml.Parser.Generator.Expr" $ []- ++ map (mkParsingTestG parseExpr) TestStrings.expr+ ++ map (mkParsingTest parseExpr) TestStrings.expr test :: IO () test = defaultMain unitTests
test/Language/OCaml/Parser/Generator/Implementation/Test.hs view
@@ -2,63 +2,24 @@ module Language.OCaml.Parser.Generator.Implementation.Test ( test- , unitTests+ , mkUnitTest ) where --- import Data.String.QQ import Test.Tasty --- import Language.OCaml.Parser.Generator.Lexer+import Language.OCaml.Definitions.Parsing.ParseTree import Language.OCaml.Parser.Generator.Parser-import Language.OCaml.Parser.TestUtils-import Language.OCaml.Parser.Implementation.Test (testFiles)---- prefix :: FilePath--- prefix = "test/ocaml/"---- mlFiles :: [String]--- mlFiles = []--- ++ map (prefix ++)--- [ "typing/typetexp.ml"--- , "typing/path.ml"--- , "typing/includecore.ml"--- , "typing/printtyped.ml"--- , "typing/typedecl.ml"--- , "typing/btype.ml"--- , "typing/typemod.ml"--- , "typing/tast_mapper.ml"--- , "typing/subst.ml"--- , "typing/typecore.ml"--- , "typing/datarepr.ml"--- , "typing/typedtree.ml"--- , "typing/untypeast.ml"--- , "typing/parmatch.ml"--- , "typing/ident.ml"--- , "typing/cmt_format.ml"--- , "typing/oprint.ml"--- , "typing/env.ml"--- , "typing/stypes.ml"--- , "typing/includemod.ml"--- , "typing/includeclass.ml"--- , "typing/primitive.ml"--- , "typing/envaux.ml"--- , "typing/typeclass.ml"--- , "typing/cmi_format.ml"--- , "typing/printtyp.ml"--- , "typing/mtype.ml"--- , "typing/types.ml"--- , "typing/typedtreeIter.ml"--- , "typing/typedtreeMap.ml"--- , "typing/typeopt.ml"--- , "typing/printpat.ml"--- , "typing/predef.ml"--- , "typing/ctype.ml"--- ]+import Language.OCaml.Parser.Implementation.Test -unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Generator.Implementation" $ []- ++ map (mkParsingTestFromFileG parseImplementation) testFiles- -- ++ map (mkParsingTestFromFileG parseImplementation) mlFiles+mkUnitTest :: [FilePath] -> TestTree+mkUnitTest fileNames =+ testGroup "Language.OCaml.Parser.Generator.Implementation" $ []+ ++ map testMLFile fileNames test :: IO ()-test = defaultMain unitTests+test = do+ mlFiles <- listMLFiles+ defaultMain $ mkUnitTest mlFiles++debug :: Either String [StructureItem]+debug = parseImplementation "let f x : b = c"
+ test/Language/OCaml/Parser/Generator/LetBinding/Test.hs view
@@ -0,0 +1,17 @@+module Language.OCaml.Parser.Generator.LetBinding.Test+ ( test+ , unitTests+ ) where++import Test.Tasty++import Language.OCaml.Parser.Generator.Parser+import Language.OCaml.Parser.TestUtils+import qualified Language.OCaml.Parser.TestStrings as TestStrings++unitTests :: TestTree+unitTests = testGroup "Language.OCaml.Parser.Generator.Structure" $ []+ ++ map (mkParsingTest parseLetBinding) TestStrings.letBinding++test :: IO ()+test = defaultMain unitTests
test/Language/OCaml/Parser/Generator/SeqExpr/Test.hs view
@@ -5,19 +5,15 @@ , unitTests ) where --- import Data.String.QQ-import Test.Tasty+import Test.Tasty --- import Language.OCaml.Parser.Generator.Lexer-import Language.OCaml.Parser.Generator.Parser--- import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils-import qualified Language.OCaml.Parser.TestStrings as TestStrings+import Language.OCaml.Parser.Generator.Parser+import Language.OCaml.Parser.TestUtils+import qualified Language.OCaml.Parser.TestStrings as TestStrings unitTests :: TestTree unitTests = testGroup "Language.OCaml.Parser.Generator.SeqExpr" $ []- ++ map (mkParsingTestG parseSeqExpr) TestStrings.seqExpr- -- ++ map (compareParses "SeqExpr" seqExprP parseSeqExpr) testStrings+ ++ map (mkParsingTest parseSeqExpr) TestStrings.seqExpr test :: IO () test = defaultMain unitTests
test/Language/OCaml/Parser/Generator/SimpleExpr/Test.hs view
@@ -11,7 +11,7 @@ unitTests :: TestTree unitTests = testGroup "Language.OCaml.Parser.Generator.SimpleExpr" $ []- ++ map (mkParsingTestG parseSimpleExpr) TestStrings.simpleExpr+ ++ map (mkParsingTest parseSimpleExpr) TestStrings.simpleExpr test :: IO () test = defaultMain unitTests
+ test/Language/OCaml/Parser/Generator/Structure/Test.hs view
@@ -0,0 +1,17 @@+module Language.OCaml.Parser.Generator.Structure.Test+ ( test+ , unitTests+ ) where++import Test.Tasty++import Language.OCaml.Parser.Generator.Parser+import Language.OCaml.Parser.TestUtils+import qualified Language.OCaml.Parser.TestStrings as TestStrings++unitTests :: TestTree+unitTests = testGroup "Language.OCaml.Parser.Generator.Structure" $ []+ ++ map (mkParsingTest parseStructure) TestStrings.structure++test :: IO ()+test = defaultMain unitTests
test/Language/OCaml/Parser/Generator/ValLongident/Test.hs view
@@ -11,7 +11,7 @@ unitTests :: TestTree unitTests = testGroup "Language.OCaml.Parser.Generator.ValLongident" $ []- ++ map (mkParsingTestG parseValLongident) testStrings+ ++ map (mkParsingTest parseValLongident) testStrings test :: IO () test = defaultMain unitTests
+ test/Language/OCaml/Parser/Ident/Test.hs view
@@ -0,0 +1,19 @@+module Language.OCaml.Parser.Ident.Test+ ( testStrings+ ) where++testStrings :: [String]+testStrings =+ [ "A"+ , "Ab"+ , "AB"+ , "a"+ , "aB"+ , "ab"+ , "A "+ , "Ab "+ , "AB "+ , "a "+ , "aB "+ , "ab "+ ]
test/Language/OCaml/Parser/Implementation/Test.hs view
@@ -1,45 +1,31 @@ {-# LANGUAGE QuasiQuotes #-} module Language.OCaml.Parser.Implementation.Test- ( test- , testFiles+ ( debugLexer+ , listMLFiles+ , testMLFile , testStrings- , unitTests ) where --- import Data.String.QQ-import Test.Tasty+import Test.Tasty+import Test.Tasty.Golden -import Language.OCaml.Parser.Internal-import qualified Language.OCaml.Parser.Structure.Test as Structure--- import Language.OCaml.Parser.Tokens-import Language.OCaml.Parser.TestUtils+import Language.OCaml.Parser.Generator.Lexer+import Language.OCaml.Parser.Generator.Parser+import qualified Language.OCaml.Parser.Structure.Test as Structure+import Language.OCaml.Parser.TestUtils -prefix :: FilePath-prefix = "test/Language/OCaml/Parser/Implementation/"+directory :: FilePath+directory = "test/Language/OCaml/Parser/Implementation" testStrings :: [String] testStrings = Structure.testStrings -testFiles :: [FilePath]-testFiles = map (prefix ++)- [ "test_00.ml"- , "test_01.ml"- , "test_02.ml"- , "test_03.ml"- , "test_04.ml"- , "test_05.ml"- , "test_06.ml"- , "test_07.ml"- , "test_08.ml"- -- , "FaCT/tast.ml"- -- , "FaCT/tast-00.ml"- -- , "FaCT/tast-01.ml"- ]+listMLFiles :: IO [FilePath]+listMLFiles = findByExtension [".ml"] directory -unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Generator.Implementation" $ []- ++ map (mkParsingTestFromFile implementationP) testFiles+testMLFile :: FilePath -> TestTree+testMLFile fileName = mkParsingTestFromFile parseImplementation fileName -test :: IO ()-test = defaultMain unitTests+debugLexer :: String -> Either String [ResultToken]+debugLexer = alexScanTokens
test/Language/OCaml/Parser/Int/Test.hs view
@@ -1,16 +1,7 @@-{-# LANGUAGE OverloadedStrings #-}- module Language.OCaml.Parser.Int.Test- ( test- , testStrings- , unitTests+ ( testStrings ) where -import Test.Tasty--import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils- testStrings :: [String] testStrings = -- decimal literals@@ -27,10 +18,3 @@ , "0b01" , "0B01" ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Int" $ []- ++ map (mkParsingTest "valLongIdentP" valLongidentP) testStrings--test :: IO ()-test = defaultMain unitTests
test/Language/OCaml/Parser/LetBinding/Test.hs view
@@ -17,9 +17,9 @@ testStrings :: [String] -> [String] testStrings structure = []- ++ [ [i| let #{ea} #{rf} #{lbb} #{pia} |]- | ea <- extAttributes- , rf <- recFlag+ ++ [ [i|let #{ea} #{rf} #{lbb} #{pia}|]+ | ea <- extAttributes+ , rf <- recFlag , lbb <- letBindingBody , pia <- postItemAttributes ]
test/Language/OCaml/Parser/LetBindingBody/Test.hs view
@@ -4,20 +4,32 @@ ( testStrings ) where -import Data.String.Interpolate+import Data.String.Interpolate -import qualified Language.OCaml.Parser.StrictBinding.Test as StrictBinding-import qualified Language.OCaml.Parser.ValIdent.Test as ValIdent+import qualified Language.OCaml.Parser.CoreType.Test as CoreType+import qualified Language.OCaml.Parser.SimplePatternNotIdent.Test as SimplePatternNotIdent+import qualified Language.OCaml.Parser.SeqExpr.Test as SeqExpr+import qualified Language.OCaml.Parser.StrictBinding.Test as StrictBinding+import qualified Language.OCaml.Parser.ValIdent.Test as ValIdent limit :: Int limit = 100 testStrings :: [String] testStrings = []- ++ [ [i| #{vi} #{sb} |]+ ++ [ [i|#{vi} #{sb}|] | vi <- valIdent , sb <- strictBinding ]+ -- TODO+ ++ [ [i|#{spni} : #{ct} = #{se}|]+ | spni <- simplePatternNotIdent+ , ct <- coreType+ , se <- seqExpr+ ] where- valIdent = take limit $ ValIdent.testStrings- strictBinding = take limit $ StrictBinding.testStrings+ coreType = take limit $ CoreType.testStrings+ seqExpr = take limit $ SeqExpr.testStrings+ simplePatternNotIdent = take limit $ SimplePatternNotIdent.testStrings+ strictBinding = take limit $ StrictBinding.testStrings+ valIdent = take limit $ ValIdent.testStrings
test/Language/OCaml/Parser/MatchCase/Test.hs view
@@ -1,25 +1,10 @@-{-# LANGUAGE OverloadedStrings #-}- module Language.OCaml.Parser.MatchCase.Test- ( test- , unitTests+ ( testStrings ) where -import Test.Tasty--import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils--matchCaseTests :: [String]-matchCaseTests =+testStrings :: [String]+testStrings = [ "a -> b" , "a -> B.c_d" , "a when b -> c" ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.MatchCase" $ []- ++ map (mkParsingTest "matchCaseP" matchCaseP) matchCaseTests--test :: IO ()-test = defaultMain unitTests
test/Language/OCaml/Parser/ModLongident/Test.hs view
@@ -1,25 +1,9 @@-{-# LANGUAGE OverloadedStrings #-}- module Language.OCaml.Parser.ModLongident.Test- ( test- , testStrings- , unitTests+ ( testStrings ) where -import Test.Tasty--import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils- testStrings :: [String] testStrings = [ "Mod" , "Mod.Mod" ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.ModLongident" $ []- ++ map (mkParsingTest "modLongidentP" modLongidentP) testStrings--test :: IO ()-test = defaultMain unitTests
test/Language/OCaml/Parser/OpenStatement/Test.hs view
@@ -1,27 +1,12 @@-{-# LANGUAGE OverloadedStrings #-}- module Language.OCaml.Parser.OpenStatement.Test- ( test- , unitTests+ ( testStrings ) where -import Test.Tasty--import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils--openStatementTests :: [String]-openStatementTests =+testStrings :: [String]+testStrings = [ "open A" , "open !A" -- , "(* A *) open !A" , "open !A (* A *)" -- , "(* A *) open !A (* A *)" ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.OpenStatement" $ []- ++ map (mkParsingTest "openStatementP" (openStatementP structureP)) openStatementTests--test :: IO ()-test = defaultMain unitTests
test/Language/OCaml/Parser/Pattern/Test.hs view
@@ -1,17 +1,9 @@-{-# LANGUAGE OverloadedStrings #-}- module Language.OCaml.Parser.Pattern.Test- ( test- , unitTests+ ( testStrings ) where -import Test.Tasty--import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils--patternTests :: [String]-patternTests =+testStrings :: [String]+testStrings = [ "_" , "a" , "A"@@ -22,10 +14,3 @@ , "_, _" , "A _, B _" ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Pattern" $ []- ++ map (mkParsingTest "patternP" patternP) patternTests--test :: IO ()-test = defaultMain unitTests
+ test/Language/OCaml/Parser/SimpleCoreType/Test.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE QuasiQuotes #-}++module Language.OCaml.Parser.SimpleCoreType.Test+ ( testStrings+ ) where++-- import Data.String.Interpolate++import qualified Language.OCaml.Parser.SimpleCoreType2.Test as SimpleCoreType2++testStrings :: [String]+testStrings = []+ ++ simpleCoreType2+ -- TODO+ where+ simpleCoreType2 = SimpleCoreType2.testStrings
+ test/Language/OCaml/Parser/SimpleCoreType2/Test.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE QuasiQuotes #-}++module Language.OCaml.Parser.SimpleCoreType2.Test+ ( testStrings+ ) where++import Data.String.Interpolate+import Prelude hiding (id)++import qualified Language.OCaml.Parser.Ident.Test as Ident++testStrings :: [String]+testStrings = []+ ++ [ [i| #{id} |]+ | id <- ident+ ]+ ++ ["_"]+ -- TODO+ where+ ident = Ident.testStrings
+ test/Language/OCaml/Parser/SimpleCoreTypeOrTuple/Test.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE QuasiQuotes #-}++module Language.OCaml.Parser.SimpleCoreTypeOrTuple.Test+ ( testStrings+ ) where++-- import Data.String.Interpolate++import qualified Language.OCaml.Parser.SimpleCoreType.Test as SimpleCoreType++testStrings :: [String]+testStrings = []+ ++ simpleCoreType+ -- TODO+ where+ simpleCoreType = SimpleCoreType.testStrings
test/Language/OCaml/Parser/SimplePattern/Test.hs view
@@ -1,26 +1,11 @@-{-# LANGUAGE OverloadedStrings #-}- module Language.OCaml.Parser.SimplePattern.Test- ( test- , unitTests+ ( testStrings ) where -import Test.Tasty--import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils--simplePatternTests :: [String]-simplePatternTests =+testStrings :: [String]+testStrings = [ "_" , "a" , "A" , "A.B" ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Pattern" $ []- ++ map (mkParsingTest "simplePatternP" simplePatternP) simplePatternTests--test :: IO ()-test = defaultMain unitTests
+ test/Language/OCaml/Parser/SimplePatternNotIdent/Test.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE QuasiQuotes #-}++module Language.OCaml.Parser.SimplePatternNotIdent.Test+ ( testStrings+ ) where++-- import Data.String.Interpolate++-- import qualified Language.OCaml.Parser.CoreTypeNoAttr.Test as CoreTypeNoAttr++testStrings :: [String]+testStrings = []+ ++ ["_"]+ -- TODO+ where+ -- coreTypeNoAttr = CoreTypeNoAttr.testStrings
test/Language/OCaml/Parser/Structure/Test.hs view
@@ -1,30 +1,25 @@ {-# LANGUAGE QuasiQuotes #-} module Language.OCaml.Parser.Structure.Test- ( test- , testStrings- , unitTests+ ( testStrings ) where import Data.String.Interpolate-import Test.Tasty -import Language.OCaml.Parser.Internal import qualified Language.OCaml.Parser.Payload.Test as Payload import qualified Language.OCaml.Parser.PostItemAttributes.Test as PostItemAttributes import qualified Language.OCaml.Parser.SeqExpr.Test as SeqExpr import qualified Language.OCaml.Parser.StructureTail.Test as StructureTail-import Language.OCaml.Parser.TestUtils limit :: Int-limit = 2+limit = 4 testStrings :: [String] testStrings = [] ++ [ [i|#{se} #{pia} #{st}|]- | se <- seqExpr+ | se <- seqExpr , pia <- postItemAttributes- , st <- structureTail+ , st <- structureTail ] where payload = take limit $ Payload.testStrings structure@@ -32,12 +27,3 @@ seqExpr = take limit $ SeqExpr.testStrings structure = take limit $ testStrings structureTail = take limit $ StructureTail.testStrings structure--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Structure" $ []- ++ map (mkParsingTest "structureP" structureP) testStrings--test :: IO ()-test = defaultMain unitTests---- debug = debugParsing structureP (structureTests !! 9)
test/Language/OCaml/Parser/StructureItem/Test.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE QuasiQuotes #-}- module Language.OCaml.Parser.StructureItem.Test ( testStrings ) where
test/Language/OCaml/Parser/TestStrings.hs view
@@ -1,6 +1,8 @@ module Language.OCaml.Parser.TestStrings ( attributes , expr+ , implementation+ , letBinding , payload , seqExpr , simpleExpr@@ -11,6 +13,8 @@ import qualified Language.OCaml.Parser.Attributes.Test as Attributes import qualified Language.OCaml.Parser.Expr.Test as Expr+import qualified Language.OCaml.Parser.Implementation.Test as Implementation+import qualified Language.OCaml.Parser.LetBinding.Test as LetBinding import qualified Language.OCaml.Parser.Payload.Test as Payload import qualified Language.OCaml.Parser.SeqExpr.Test as SeqExpr import qualified Language.OCaml.Parser.SimpleExpr.Test as SimpleExpr@@ -23,6 +27,12 @@ expr :: [String] expr = Expr.testStrings seqExpr++implementation :: [String]+implementation = Implementation.testStrings++letBinding :: [String]+letBinding = LetBinding.testStrings structure payload :: [String] payload = Payload.testStrings structure
test/Language/OCaml/Parser/TestUtils.hs view
@@ -1,64 +1,27 @@ module Language.OCaml.Parser.TestUtils- ( compareParses- , debugParsing- , mkParsingTest- , mkParsingTestG+ ( mkParsingTest , mkParsingTestFromFile- , mkParsingTestFromFileG , parse ) where -import Data.Void import Text.Megaparsec import Test.Tasty import Test.Tasty.HUnit import Language.OCaml.Parser-import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.Utils.Utils -assertParsesC :: ParserC a -> String -> Assertion-assertParsesC parser input = do- case parseMaybe parser input of- Nothing -> assertFailure $ "Failed to parse: " ++ take 60 input- Just _ -> return ()--assertParsesG :: ParserG a -> String -> Assertion-assertParsesG parser input = do+assertParses :: Parser a -> String -> Assertion+assertParses parser input = do case parser input of Left msg -> assertFailure msg Right _ -> return () -mkParsingTest :: TestName -> Parser a -> String -> TestTree-mkParsingTest name parser input = testCase name $ assertParsesC parser input--mkParsingTestG :: (String -> Either String a) -> String -> TestTree-mkParsingTestG parser input = testCase shortInput $ assertParsesG parser input+mkParsingTest :: (String -> Either String a) -> String -> TestTree+mkParsingTest parser input = testCase shortInput $ assertParses parser input where shortInput | length input <= 40 = input | otherwise = take 40 input ++ "..." -mkParsingTestFromFile :: Parser a -> FilePath -> TestTree-mkParsingTestFromFile parser fileName = testCase fileName $ readFile fileName >>= assertParsesC parser--mkParsingTestFromFileG :: (String -> Either String a) -> FilePath -> TestTree-mkParsingTestFromFileG parser fileName = testCase fileName $ readFile fileName >>= assertParsesG parser--debugParsing :: Parser a -> String -> Either (ParseError (Token String) Void) a-debugParsing parser input =- parse (ocamlSpace *> parser <* eof) "DEBUG" input--compareParses ::- (Eq a, Show a) =>- TestName -> Parser a -> (String -> Either String a) -> String -> TestTree-compareParses name parserC parserG input =- testCase name $ do- case (parseMaybe parserC input, parserG input) of- (Just outputC, Right outputG) -> (outputC == outputG)- @? ("Results differ:\n"- ++ "Combinator: " ++ show outputC ++ "\n"- ++ "Generator: " ++ show outputG ++ "\n"- )- (Just _, Left _) -> False @? "Parser generator failed"- (Nothing, Right _) -> False @? "Parser combinator failed"- (Nothing, Left _) -> False @? "Both parsers failed"+mkParsingTestFromFile :: (String -> Either String a) -> FilePath -> TestTree+mkParsingTestFromFile parser fileName =+ testCase fileName $ readFile fileName >>= assertParses parser
− test/Language/OCaml/Parser/Tokens/Test.hs
@@ -1,37 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE QuasiQuotes #-}--module Language.OCaml.Parser.Tokens.Test- ( test- , unitTests- ) where--import Data.String.QQ--- import Text.Megaparsec-import Test.Tasty--import Language.OCaml.Parser.Internal-import Language.OCaml.Parser.TestUtils---- lIdentTests :: [String]--- lIdentTests = [ "a", "a " ]---- uIdentTests :: [String]--- uIdentTests = [ "A", "A " ]---- starTests :: [String]--- starTests = [ "*", "* ", " *", " * " ]--stringTests :: [String]-stringTests =- [ [s|"foo"|]- ]--unitTests :: TestTree-unitTests = testGroup "Language.OCaml.Parser.Tokens" $ []- ++ map (mkParsingTest "stringT" stringT) stringTests--test :: IO ()-test = defaultMain unitTests---- foo = debugParsing (stringT *> stringT) [s|"foo" "bar"|]
test/Language/OCaml/PrettyPrinter/TestUtils.hs view
@@ -17,7 +17,7 @@ import Language.OCaml.Parser -mkPrettyPrinterTest :: (Eq a) => TestName -> ParserG a -> (a -> Doc b) -> String -> TestTree+mkPrettyPrinterTest :: (Eq a) => TestName -> Parser a -> (a -> Doc b) -> String -> TestTree mkPrettyPrinterTest name parser printer input = testCase name $ condition @? message where@@ -55,7 +55,7 @@ ++ show (pretty a) ++ "\n" debugPrettyPrinter ::- (Eq a) => ParserG a -> (a -> Doc b) -> String -> DebugPrettyPrinter a b+ (Eq a) => Parser a -> (a -> Doc b) -> String -> DebugPrettyPrinter a b debugPrettyPrinter parser printer input = case parser input of Left _ -> NoParse1@@ -64,8 +64,8 @@ Left _ -> NoParse2 r (printer r) Right r' -> if r == r' then ParseEq r' else ParseDiff r r' -parseAndPrettyPrint :: ParserG a -> (a -> Doc b) -> String -> Either String (Doc b)+parseAndPrettyPrint :: Parser a -> (a -> Doc b) -> String -> Either String (Doc b) parseAndPrettyPrint parser printer input = printer <$> parser input -roundtrip :: ParserG a -> (a -> Doc b) -> String -> Either String String+roundtrip :: Parser a -> (a -> Doc b) -> String -> Either String String roundtrip p pp s = (show . pp) <$> p s
test/Main.hs view
@@ -2,15 +2,13 @@ module Main where -import Test.Tasty+import Test.Tasty --- import qualified Language.OCaml.Parser.Common.Test--- import qualified Language.OCaml.Parser.ConstrLongident.Test--- import qualified Language.OCaml.Parser.Expr.Test -- import qualified Language.OCaml.Parser.Generator.Common.Test -- import qualified Language.OCaml.Parser.Generator.ConstrLongident.Test import qualified Language.OCaml.Parser.Generator.Expr.Test import qualified Language.OCaml.Parser.Generator.Implementation.Test+import qualified Language.OCaml.Parser.Generator.LetBinding.Test -- import qualified Language.OCaml.Parser.Generator.MatchCase.Test -- import qualified Language.OCaml.Parser.Generator.ModLongident.Test -- import qualified Language.OCaml.Parser.Generator.OpenStatement.Test@@ -18,12 +16,12 @@ import qualified Language.OCaml.Parser.Generator.SeqExpr.Test import qualified Language.OCaml.Parser.Generator.SimpleExpr.Test -- import qualified Language.OCaml.Parser.Generator.SimplePattern.Test--- import qualified Language.OCaml.Parser.Generator.Structure.Test+import qualified Language.OCaml.Parser.Generator.Structure.Test -- import qualified Language.OCaml.Parser.Generator.StructureItem.Test -- import qualified Language.OCaml.Parser.Generator.Tokens.Test -- import qualified Language.OCaml.Parser.Generator.ValIdent.Test import qualified Language.OCaml.Parser.Generator.ValLongident.Test--- import qualified Language.OCaml.Parser.Implementation.Test+import Language.OCaml.Parser.Implementation.Test -- import qualified Language.OCaml.Parser.MatchCase.Test -- import qualified Language.OCaml.Parser.ModLongident.Test -- import qualified Language.OCaml.Parser.OpenStatement.Test@@ -40,34 +38,17 @@ import qualified Language.OCaml.PrettyPrinter.Structure.Test main :: IO ()-main = defaultMain tests+main = do+ mlFiles <- listMLFiles+ defaultMain $ tests mlFiles -tests :: TestTree-tests = testGroup "Tests" $ []- -- ++ [ testGroup "Parser combinator" $- -- [ Language.OCaml.Parser.Common.Test.unitTests- -- , Language.OCaml.Parser.ConstrLongident.Test.unitTests- -- , Language.OCaml.Parser.Expr.Test.unitTests- -- , Language.OCaml.Parser.Implementation.Test.unitTests- -- , Language.OCaml.Parser.MatchCase.Test.unitTests- -- , Language.OCaml.Parser.ModLongident.Test.unitTests- -- , Language.OCaml.Parser.OpenStatement.Test.unitTests- -- , Language.OCaml.Parser.Pattern.Test.unitTests- -- , Language.OCaml.Parser.SeqExpr.Test.unitTests- -- , Language.OCaml.Parser.SimpleExpr.Test.unitTests- -- , Language.OCaml.Parser.SimplePattern.Test.unitTests- -- , Language.OCaml.Parser.Structure.Test.unitTests- -- , Language.OCaml.Parser.StructureItem.Test.unitTests- -- , Language.OCaml.Parser.Tokens.Test.unitTests- -- , Language.OCaml.Parser.ValIdent.Test.unitTests- -- , Language.OCaml.Parser.ValLongident.Test.unitTests- -- ]- -- ]+tests :: [FilePath] -> TestTree+tests mlFiles = testGroup "Tests" $ [] ++ [ testGroup "Parser generator" $ -- [ Language.OCaml.Parser.Generator.Common.Test.unitTests -- , Language.OCaml.Parser.Generator.ConstrLongident.Test.unitTests [ Language.OCaml.Parser.Generator.Expr.Test.unitTests- , Language.OCaml.Parser.Generator.Implementation.Test.unitTests+ , Language.OCaml.Parser.Generator.LetBinding.Test.unitTests -- , Language.OCaml.Parser.Generator.MatchCase.Test.unitTests -- , Language.OCaml.Parser.Generator.ModLongident.Test.unitTests -- , Language.OCaml.Parser.Generator.OpenStatement.Test.unitTests@@ -75,12 +56,13 @@ , Language.OCaml.Parser.Generator.SeqExpr.Test.unitTests , Language.OCaml.Parser.Generator.SimpleExpr.Test.unitTests -- , Language.OCaml.Parser.Generator.SimplePattern.Test.unitTests- -- , Language.OCaml.Parser.Generator.Structure.Test.unitTests+ , Language.OCaml.Parser.Generator.Structure.Test.unitTests -- , Language.OCaml.Parser.Generator.StructureItem.Test.unitTests -- , Language.OCaml.Parser.Generator.Tokens.Test.unitTests -- , Language.OCaml.Parser.Generator.ValIdent.Test.unitTests , Language.OCaml.Parser.Generator.ValLongident.Test.unitTests ]+ ++ [ Language.OCaml.Parser.Generator.Implementation.Test.mkUnitTest mlFiles ] ] ++ [ testGroup "PrettyPrinter" $ [ Language.OCaml.PrettyPrinter.Structure.Test.unitTests