mirror of
https://github.com/natefaubion/purescript-tidy.git
synced 2024-11-29 14:53:30 +03:00
Move operator defaults/parsing to src. (#65)
This commit is contained in:
parent
81d6139946
commit
8fa8516bcf
@ -4,7 +4,6 @@ import Prelude
|
|||||||
|
|
||||||
import Bin.FormatOptions (FormatOptions)
|
import Bin.FormatOptions (FormatOptions)
|
||||||
import Bin.FormatOptions as FormatOptions
|
import Bin.FormatOptions as FormatOptions
|
||||||
import Bin.Operators (parseOperatorTable)
|
|
||||||
import Bin.Timing (hrtime, hrtimeDiff, toMilliseconds)
|
import Bin.Timing (hrtime, hrtimeDiff, toMilliseconds)
|
||||||
import Data.Either (Either(..), either, fromRight')
|
import Data.Either (Either(..), either, fromRight')
|
||||||
import Data.Lazy (Lazy)
|
import Data.Lazy (Lazy)
|
||||||
@ -27,6 +26,7 @@ import Partial.Unsafe (unsafeCrashWith)
|
|||||||
import PureScript.CST (RecoveredParserResult(..), parseModule)
|
import PureScript.CST (RecoveredParserResult(..), parseModule)
|
||||||
import PureScript.CST.Errors (ParseError, printParseError)
|
import PureScript.CST.Errors (ParseError, printParseError)
|
||||||
import PureScript.CST.Tidy (defaultFormatOptions, formatModule, toDoc)
|
import PureScript.CST.Tidy (defaultFormatOptions, formatModule, toDoc)
|
||||||
|
import PureScript.CST.Tidy.Operators (parseOperatorTable)
|
||||||
import PureScript.CST.Tidy.Precedence (PrecedenceMap, remapOperators)
|
import PureScript.CST.Tidy.Precedence (PrecedenceMap, remapOperators)
|
||||||
|
|
||||||
type WorkerConfig =
|
type WorkerConfig =
|
||||||
|
@ -6,7 +6,6 @@ import ArgParse.Basic (ArgParser)
|
|||||||
import ArgParse.Basic as Arg
|
import ArgParse.Basic as Arg
|
||||||
import Bin.FormatOptions (FormatOptions, formatOptions)
|
import Bin.FormatOptions (FormatOptions, formatOptions)
|
||||||
import Bin.FormatOptions as FormatOptions
|
import Bin.FormatOptions as FormatOptions
|
||||||
import Bin.Operators (getModuleName, parseOperatorTable, resolveOperatorExports)
|
|
||||||
import Bin.Version (version)
|
import Bin.Version (version)
|
||||||
import Bin.Worker (WorkerData, WorkerInput, WorkerOutput, formatCommand, formatInPlaceCommand, toWorkerConfig)
|
import Bin.Worker (WorkerData, WorkerInput, WorkerOutput, formatCommand, formatInPlaceCommand, toWorkerConfig)
|
||||||
import Control.Monad.State (evalStateT, lift)
|
import Control.Monad.State (evalStateT, lift)
|
||||||
@ -34,7 +33,6 @@ import Data.String as String
|
|||||||
import Data.Traversable (for, traverse)
|
import Data.Traversable (for, traverse)
|
||||||
import Data.Tuple (Tuple(..))
|
import Data.Tuple (Tuple(..))
|
||||||
import Data.Tuple.Nested ((/\))
|
import Data.Tuple.Nested ((/\))
|
||||||
import DefaultOperators (defaultOperators)
|
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import Effect.Aff (Aff, error, launchAff_, makeAff, throwError, try)
|
import Effect.Aff (Aff, error, launchAff_, makeAff, throwError, try)
|
||||||
import Effect.Class (liftEffect)
|
import Effect.Class (liftEffect)
|
||||||
@ -56,7 +54,10 @@ import Node.WorkerBees.Aff.Pool (poolTraverse)
|
|||||||
import PureScript.CST (RecoveredParserResult(..), parseModule, toRecovered)
|
import PureScript.CST (RecoveredParserResult(..), parseModule, toRecovered)
|
||||||
import PureScript.CST.Errors (printParseError)
|
import PureScript.CST.Errors (printParseError)
|
||||||
import PureScript.CST.ModuleGraph (ModuleSort(..), sortModules)
|
import PureScript.CST.ModuleGraph (ModuleSort(..), sortModules)
|
||||||
|
import PureScript.CST.Tidy.Operators (parseOperatorTable, resolveOperatorExports)
|
||||||
|
import PureScript.CST.Tidy.Operators.Defaults (defaultOperators)
|
||||||
import PureScript.CST.Tidy.Precedence (OperatorNamespace(..), PrecedenceMap)
|
import PureScript.CST.Tidy.Precedence (OperatorNamespace(..), PrecedenceMap)
|
||||||
|
import PureScript.CST.Types (Module(..), ModuleHeader(..), Name(..))
|
||||||
|
|
||||||
data FormatMode = Check | Write
|
data FormatMode = Check | Write
|
||||||
|
|
||||||
@ -389,6 +390,7 @@ generateOperatorsCommand globs = do
|
|||||||
|
|
||||||
case sortModules (_.header <<< unwrap) parsedModules of
|
case sortModules (_.header <<< unwrap) parsedModules of
|
||||||
CycleDetected ms -> do
|
CycleDetected ms -> do
|
||||||
|
let getModuleName (Module { header: ModuleHeader { name: Name { name } } }) = name
|
||||||
let modNames = map (unwrap <<< getModuleName) ms
|
let modNames = map (unwrap <<< getModuleName) ms
|
||||||
Console.error $ String.joinWith "\n"
|
Console.error $ String.joinWith "\n"
|
||||||
[ "Cycle detected in modules:"
|
[ "Cycle detected in modules:"
|
||||||
|
@ -46,7 +46,7 @@ main = do
|
|||||||
[ "--------------------------------------------"
|
[ "--------------------------------------------"
|
||||||
, "-- This module is generated. DO NOT EDIT! --"
|
, "-- This module is generated. DO NOT EDIT! --"
|
||||||
, "--------------------------------------------"
|
, "--------------------------------------------"
|
||||||
, "module DefaultOperators where"
|
, "module PureScript.CST.Tidy.Operators.Defaults where"
|
||||||
, ""
|
, ""
|
||||||
, "defaultOperators :: Array String"
|
, "defaultOperators :: Array String"
|
||||||
, "defaultOperators ="
|
, "defaultOperators ="
|
||||||
@ -66,7 +66,7 @@ main = do
|
|||||||
contents =
|
contents =
|
||||||
Array.intercalate "\n" (header <> lines <> footer)
|
Array.intercalate "\n" (header <> lines <> footer)
|
||||||
|
|
||||||
writeTextFile UTF8 (Path.concat [ cwdPath, "bin", "DefaultOperators.purs" ]) contents
|
writeTextFile UTF8 (Path.concat [ cwdPath, "src", "PureScript", "CST", "Tidy", "Operators", "Defaults.purs" ]) contents
|
||||||
|
|
||||||
defaultSpagoDhall :: String
|
defaultSpagoDhall :: String
|
||||||
defaultSpagoDhall =
|
defaultSpagoDhall =
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
module Bin.Operators where
|
module PureScript.CST.Tidy.Operators where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ import PureScript.CST.Lexer as Lexer
|
|||||||
import PureScript.CST.Tidy.Precedence (OperatorNamespace(..), Precedence, QualifiedOperator(..), PrecedenceMap, insertOperator, lookupOperator, remapOperators)
|
import PureScript.CST.Tidy.Precedence (OperatorNamespace(..), Precedence, QualifiedOperator(..), PrecedenceMap, insertOperator, lookupOperator, remapOperators)
|
||||||
import PureScript.CST.TokenStream (TokenStep(..), TokenStream)
|
import PureScript.CST.TokenStream (TokenStep(..), TokenStream)
|
||||||
import PureScript.CST.TokenStream as TokenStream
|
import PureScript.CST.TokenStream as TokenStream
|
||||||
import PureScript.CST.Types (Declaration(..), Export(..), FixityOp(..), IntValue(..), Module(..), ModuleBody(..), ModuleHeader(..), ModuleName, Name(..), Operator(..), Separated(..), Token(..), Wrapped(..))
|
import PureScript.CST.Types (Declaration(..), Export(..), FixityOp(..), IntValue(..), Module(..), ModuleBody(..), ModuleHeader(..), Name(..), Operator(..), Separated(..), Token(..), Wrapped(..))
|
||||||
|
|
||||||
parseOperatorTable :: Array String -> PrecedenceMap
|
parseOperatorTable :: Array String -> PrecedenceMap
|
||||||
parseOperatorTable = foldr (uncurry insertOperator) Map.empty <<< Array.mapMaybe parseOperatorPrec
|
parseOperatorTable = foldr (uncurry insertOperator) Map.empty <<< Array.mapMaybe parseOperatorPrec
|
||||||
@ -26,18 +26,34 @@ parseOperatorPrec = Lexer.lex >>> tokenStreamToArray >>> case _ of
|
|||||||
Just $ Tuple (QualifiedOperator modName OperatorType (Operator op)) prec
|
Just $ Tuple (QualifiedOperator modName OperatorType (Operator op)) prec
|
||||||
_ ->
|
_ ->
|
||||||
Nothing
|
Nothing
|
||||||
|
where
|
||||||
|
tokenStreamToArray :: TokenStream -> Either ParseError (Array Token)
|
||||||
|
tokenStreamToArray = go []
|
||||||
|
where
|
||||||
|
go acc = TokenStream.step >>> case _ of
|
||||||
|
TokenEOF _ _ ->
|
||||||
|
Right acc
|
||||||
|
TokenError _ err _ _ ->
|
||||||
|
Left err
|
||||||
|
TokenCons tok _ next _ ->
|
||||||
|
go (Array.snoc acc tok.value) next
|
||||||
|
|
||||||
resolveOperatorExports :: forall e. PrecedenceMap -> Module e -> PrecedenceMap
|
resolveOperatorExports :: forall e. PrecedenceMap -> Module e -> PrecedenceMap
|
||||||
resolveOperatorExports precMap mod@(Module { header: ModuleHeader { exports }, body: ModuleBody { decls } }) =
|
resolveOperatorExports
|
||||||
|
precMap
|
||||||
|
mod@
|
||||||
|
( Module
|
||||||
|
{ header: ModuleHeader { exports, name: Name { name: modName } }
|
||||||
|
, body: ModuleBody { decls }
|
||||||
|
}
|
||||||
|
) =
|
||||||
case exports of
|
case exports of
|
||||||
Nothing ->
|
Nothing ->
|
||||||
foldl goDecl precMap decls
|
foldl goDecl precMap decls
|
||||||
Just (Wrapped { value: Separated { head, tail } }) ->
|
Just (Wrapped { value: Separated { head, tail } }) ->
|
||||||
foldl goExport precMap $ Array.cons head $ map snd tail
|
foldl goExport precMap $ Array.cons head $ map snd tail
|
||||||
where
|
|
||||||
modName =
|
|
||||||
getModuleName mod
|
|
||||||
|
|
||||||
|
where
|
||||||
remappedPrecMap =
|
remappedPrecMap =
|
||||||
remapOperators precMap mod
|
remapOperators precMap mod
|
||||||
|
|
||||||
@ -63,17 +79,3 @@ resolveOperatorExports precMap mod@(Module { header: ModuleHeader { exports }, b
|
|||||||
insertOperator (QualifiedOperator (Just modName) OperatorType op) prec pm
|
insertOperator (QualifiedOperator (Just modName) OperatorType op) prec pm
|
||||||
_ ->
|
_ ->
|
||||||
pm
|
pm
|
||||||
|
|
||||||
getModuleName :: forall e. Module e -> ModuleName
|
|
||||||
getModuleName (Module { header: ModuleHeader { name: Name { name } } }) = name
|
|
||||||
|
|
||||||
tokenStreamToArray :: TokenStream -> Either ParseError (Array Token)
|
|
||||||
tokenStreamToArray = go []
|
|
||||||
where
|
|
||||||
go acc = TokenStream.step >>> case _ of
|
|
||||||
TokenEOF _ _ ->
|
|
||||||
Right acc
|
|
||||||
TokenError _ err _ _ ->
|
|
||||||
Left err
|
|
||||||
TokenCons tok _ next _ ->
|
|
||||||
go (Array.snoc acc tok.value) next
|
|
@ -1,7 +1,7 @@
|
|||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
-- This module is generated. DO NOT EDIT! --
|
-- This module is generated. DO NOT EDIT! --
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
module DefaultOperators where
|
module PureScript.CST.Tidy.Operators.Defaults where
|
||||||
|
|
||||||
defaultOperators :: Array String
|
defaultOperators :: Array String
|
||||||
defaultOperators =
|
defaultOperators =
|
@ -2,7 +2,6 @@ module Test.Snapshot where
|
|||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
|
||||||
import Bin.Operators (parseOperatorTable)
|
|
||||||
import Control.MonadZero (guard)
|
import Control.MonadZero (guard)
|
||||||
import Data.Array (dropEnd, mapMaybe)
|
import Data.Array (dropEnd, mapMaybe)
|
||||||
import Data.Array as Array
|
import Data.Array as Array
|
||||||
@ -20,7 +19,6 @@ import Data.String as String
|
|||||||
import Data.String.Regex as Regex
|
import Data.String.Regex as Regex
|
||||||
import Data.Traversable (for)
|
import Data.Traversable (for)
|
||||||
import Data.Tuple (Tuple(..), fst)
|
import Data.Tuple (Tuple(..), fst)
|
||||||
import DefaultOperators (defaultOperators)
|
|
||||||
import Dodo (PrintOptions)
|
import Dodo (PrintOptions)
|
||||||
import Dodo as Dodo
|
import Dodo as Dodo
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
@ -40,6 +38,8 @@ import PureScript.CST (RecoveredParserResult(..), parseModule)
|
|||||||
import PureScript.CST.Errors (printParseError)
|
import PureScript.CST.Errors (printParseError)
|
||||||
import PureScript.CST.Tidy (class FormatError, FormatOptions)
|
import PureScript.CST.Tidy (class FormatError, FormatOptions)
|
||||||
import PureScript.CST.Tidy as Tidy
|
import PureScript.CST.Tidy as Tidy
|
||||||
|
import PureScript.CST.Tidy.Operators (parseOperatorTable)
|
||||||
|
import PureScript.CST.Tidy.Operators.Defaults (defaultOperators)
|
||||||
import PureScript.CST.Tidy.Precedence (PrecedenceMap)
|
import PureScript.CST.Tidy.Precedence (PrecedenceMap)
|
||||||
import PureScript.CST.Types (Module)
|
import PureScript.CST.Types (Module)
|
||||||
import Test.FormatDirective (defaultFormat, directiveRegex, parseDirectivesFromModule)
|
import Test.FormatDirective (defaultFormat, directiveRegex, parseDirectivesFromModule)
|
||||||
|
@ -37,5 +37,5 @@
|
|||||||
, "tuples"
|
, "tuples"
|
||||||
]
|
]
|
||||||
, packages = ../packages.dhall
|
, packages = ../packages.dhall
|
||||||
, sources = [ "src/**/*.purs", "test/*.purs", "bin/Bin/*.purs", "bin/DefaultOperators.purs" ]
|
, sources = [ "src/**/*.purs", "test/*.purs", "bin/Bin/*.purs" ]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user