ats-format 0.1.0.27 → 0.1.0.28
raw patch · 5 files changed
+32/−11 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Language.ATS: printATSCustom :: Float -> Int -> ATS -> String
+ Language.ATS: printATSFast :: ATS -> String
- Language.ATS: OverloadIdent :: AlexPosn -> String -> Name -> Declaration
+ Language.ATS: OverloadIdent :: AlexPosn -> String -> Name -> (Maybe Int) -> Declaration
Files
- ats-format.cabal +8/−1
- src/Language/ATS.hs +2/−0
- src/Language/ATS/Parser.y +6/−3
- src/Language/ATS/PrettyPrint.hs +12/−4
- src/Language/ATS/Types.hs +4/−3
ats-format.cabal view
@@ -1,5 +1,5 @@ name: ats-format-version: 0.1.0.27+version: 0.1.0.28 synopsis: A source-code formatter for ATS description: An opinionated source-code formatter for [ATS](http://www.ats-lang.org/). homepage: https://hub.darcs.net/vmchale/ats-format#readme@@ -36,6 +36,11 @@ default: False } +Flag library {+ Description: Do not build executable+ default: False+}+ library hs-source-dirs: src exposed-modules: Language.ATS@@ -70,6 +75,8 @@ ghc-options: -Wall executable atsfmt+ if flag(library)+ buildable: False hs-source-dirs: app main-is: Main.hs build-depends: base
src/Language/ATS.hs view
@@ -3,6 +3,8 @@ lexATS , parseATS , printATS+ , printATSCustom+ , printATSFast -- * Syntax Tree , ATS (..) , Declaration (..)
src/Language/ATS/Parser.y view
@@ -413,6 +413,7 @@ | let ATS in Expression lineComment {% Left $ Expected (token_posn $5) "end" (take 2 $ to_string $5) } | let ATS in Expression extern {% Left $ Expected $5 "end" "extern" } | let ATS in Expression fun {% Left $ Expected $5 "end" "fun" }+ | if Expression then Expression else else {% Left $ Expected $6 "Expression" "else" } -- | Parse a termetric Termetric : openTermetric StaticExpression closeTermetric { ($1, $2) }@@ -560,6 +561,7 @@ | prfn PreFunction { [ Func $1 (PrFn $2) ] } | fnx PreFunction { [ Func $1 (Fnx $2) ] } | castfn PreFunction { [ Func $1 (CastFn $2) ] }+ | fn PreFunction identifier {% Left $ Expected (token_posn $3) "=" (to_string $3) } | fn PreFunction { [ Func $1 (Fn $2) ] } | FunDecl and PreFunction { Func $2 (And $3) : $1 } | extern FunDecl { over _head (Extern $1) $2 }@@ -604,7 +606,7 @@ | absprop IdentifierOr openParen FullArgs closeParen { AbsProp $1 $2 [] } | stadef IdentifierOr eq Name { Stadef $2 $4 [] } | stadef IdentifierOr eq Name openParen TypeIn closeParen { Stadef $2 $4 $6 }- | stadef boolLit eq Name { Stadef (over _head toLower (show $2)) $4 [] }+ | stadef boolLit eq Name { Stadef (over _head toLower (show $2)) $4 [] } -- TODO identifierSpace | sortdef IdentifierOr eq Type { SortDef $1 $2 $4 } | AndSort { $1 } @@ -645,7 +647,8 @@ | implement Implementation { Impl [] $2 } | implement openParen Args closeParen Implementation { Impl $3 $5 } | overload BinOp with Name { OverloadOp $1 $2 $4 }- | overload identifierSpace with Name { OverloadIdent $1 (to_string $2) $4 }+ | overload identifierSpace with Name { OverloadIdent $1 (to_string $2) $4 Nothing }+ | overload tilde with identifierSpace of intLit { OverloadIdent $1 "~" (Unqualified $ to_string $4) (Just $6) } -- FIXME figure out a general solution. | assume Name openParen Args closeParen eq Expression { Assume $2 $4 $7 } | tkindef IdentifierOr eq string { TKind $1 (Unqualified $2) $4 } | TypeDecl { $1 }@@ -653,7 +656,7 @@ | stacst IdentifierOr colon Type OptExpression { Stacst $1 (Unqualified $2) $4 $5 } | propdef IdentifierOr openParen Args closeParen eq Type { PropDef $1 $2 $4 $7 } | Fixity intLit Operators { FixityDecl $1 (Just $2) $3 }- | val lbrace Universals rbrace IdentifierOr colon Type { StaVal $3 $5 $7 }+ | val Universals IdentifierOr colon Type { StaVal $2 $3 $5 } | lambda {% Left $ Expected $1 "Declaration" "lam" } | llambda {% Left $ Expected $1 "Declaration" "llam" } | minus {% Left $ Expected $1 "Declaration" "-" }
src/Language/ATS/PrettyPrint.hs view
@@ -12,6 +12,7 @@ module Language.ATS.PrettyPrint ( printATS , printATSCustom+ , printATSFast , processClang ) where @@ -66,14 +67,20 @@ printClang :: String -> IO String printClang = readCreateProcess (shell "clang-format") +-- | Pretty-print with sensible defaults. printATS :: ATS -> String-printATS (ATS x) = g mempty- where g = (displayS . renderSmart 0.6 120 . (<> "\n") . pretty) (ATS $ reverse x)+printATS = (<> "\n") . printATSCustom 0.6 120 -printATSCustom :: Float -> Int -> ATS -> String+printATSCustom :: Float -- ^ Ribbon fraction+ -> Int -- ^ Ribbon width+ -> ATS -> String printATSCustom r i (ATS x) = g mempty where g = (displayS . renderSmart r i . pretty) (ATS $ reverse x) +-- | Fast pretty-printer without indendation. Useful for generating code.+printATSFast :: ATS -> String+printATSFast (ATS x) = g mempty+ where g = (displayS . renderCompact . (<> "\n") . pretty) (ATS $ reverse x) instance Pretty Name where pretty (Unqualified n) = text n@@ -485,7 +492,8 @@ pretty (CBlock s) = string s pretty (Comment s) = string s pretty (OverloadOp _ o n) = "overload" <+> pretty o <+> "with" <+> pretty n- pretty (OverloadIdent _ i n) = "overload" <+> text i <+> "with" <+> pretty n+ pretty (OverloadIdent _ i n Nothing) = "overload" <+> text i <+> "with" <+> pretty n+ pretty (OverloadIdent _ i n (Just n')) = "overload" <+> text i <+> "with" <+> pretty n <+> "of" <+> pretty n' -- We use 'text' here, which means indentation might get fucked up for -- C preprocessor macros, but you absolutely deserve it if you indent your -- macros.
src/Language/ATS/Types.hs view
@@ -91,7 +91,7 @@ | AbsT0p AlexPosn String Type | ViewDef AlexPosn String [Arg] Type | OverloadOp AlexPosn BinOp Name- | OverloadIdent AlexPosn String Name+ | OverloadIdent AlexPosn String Name (Maybe Int) | Comment String | DataProp AlexPosn String [Arg] [DataPropLeaf] | Extern AlexPosn Declaration@@ -148,7 +148,7 @@ | ViewLiteral Addendum deriving (Show, Eq, Generic, NFData) --- | A type for the various lambda arrows (@=>@, @=<cloref1>@, etc.)+-- | A type for the various lambda arrows (@=>@, @=\<cloref1>@, etc.) data LambdaType = Plain AlexPosn | Full AlexPosn String | Spear AlexPosn@@ -214,6 +214,7 @@ | Mod deriving (Show, Eq, Generic, NFData) +-- FIXME add position information? data StaticExpression = StaticVal Name | StaticBinary BinOp StaticExpression StaticExpression | StaticInt Int@@ -303,7 +304,7 @@ deriving (Show, Eq, Generic, NFData) data PreFunction = PreF { fname :: Name -- ^ Function name- , sig :: String -- ^ e.g. <> or <!wrt>+ , sig :: String -- ^ e.g. <> or \<!wrt> , preUniversals :: [Universal] -- ^ Universal quantifiers making a function generic , universals :: [Universal] -- ^ Universal quantifiers/refinement type , args :: [Arg] -- ^ Actual function arguments