git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Only allow one module per file
ef14768Gary Burgess
examples/docs/src/Clash.purs−28
@@ -2,31 +2,3 @@ module Clash (module Clash1) where
2
2
3import Clash1 as Clash1
3import Clash1 as Clash1
4import Clash2 as Clash2
4import Clash2 as Clash2
5−
6−module Clash1 (module Clash1a) where
7−
8−import Clash1a
9−
10−module Clash1a where
11−
12−value :: Int
13−value = 0
14−
15−type Type = Int
16−
17−class TypeClass a where
18− typeClassMember :: a
19−
20−module Clash2 (module Clash2a) where
21−
22−import Clash2a
23−
24−module Clash2a where
25−
26−value :: String
27−value = "hello"
28−
29−type Type = String
30−
31−class TypeClass a b where
32− typeClassMember :: a -> b
examples/docs/src/Clash1.pursnew file+3
@@ -0,0 +1,3 @@
1+module Clash1 (module Clash1a) where
2+
3+import Clash1a
examples/docs/src/Clash1a.pursnew file+9
@@ -0,0 +1,9 @@
1+module Clash1a where
2+
3+value :: Int
4+value = 0
5+
6+type Type = Int
7+
8+class TypeClass a where
9+ typeClassMember :: a
examples/docs/src/Clash2.pursnew file+3
@@ -0,0 +1,3 @@
1+module Clash2 (module Clash2a) where
2+
3+import Clash2a
examples/docs/src/Clash2a.pursnew file+9
@@ -0,0 +1,9 @@
1+module Clash2a where
2+
3+value :: String
4+value = "hello"
5+
6+type Type = String
7+
8+class TypeClass a b where
9+ typeClassMember :: a -> b
examples/docs/src/ImportedTwice.purs+4−18
@@ -4,24 +4,10 @@
4-- re-exports it from Control.Monad.Trans).
4-- re-exports it from Control.Monad.Trans).
5
5
6module ImportedTwice
6module ImportedTwice
7− ( module A
7+ ( module ImportedTwiceA
8− , module B
8+ , module ImportedTwiceB
9 )
9 )
10 where
10 where
11
11
12−import A
12+import ImportedTwiceA
13−import B
14−
15−module A
16− ( module B )
17− where
18−
19−import B
13+import ImportedTwiceB
20−
21−bar :: Int
22−bar = 1
23−
24−module B where
25−
26−foo :: Int
27−foo = 0
examples/docs/src/ImportedTwiceA.pursnew file+8
@@ -0,0 +1,8 @@
1+module ImportedTwiceA
2+ ( module ImportedTwiceB )
3+ where
4+
5+import ImportedTwiceB
6+
7+bar :: Int
8+bar = 1
examples/docs/src/ImportedTwiceB.pursnew file+4
@@ -0,0 +1,4 @@
1+module ImportedTwiceB where
2+
3+foo :: Int
4+foo = 0
examples/docs/src/MultiVirtual.purs−21
@@ -4,24 +4,3 @@ module MultiVirtual
4
4
5import MultiVirtual1 as X
5import MultiVirtual1 as X
6import MultiVirtual2 as X
6import MultiVirtual2 as X
7−
8−
9−module MultiVirtual1 where
10−
11−foo :: Int
12−foo = 1
13−
14−module MultiVirtual2
15− ( module MultiVirtual2
16− , module MultiVirtual3
17− ) where
18−
19−import MultiVirtual3
20−
21−bar :: Int
22−bar = 2
23−
24−module MultiVirtual3 where
25−
26−baz :: Int
27−baz = 3
examples/docs/src/MultiVirtual1.pursnew file+4
@@ -0,0 +1,4 @@
1+module MultiVirtual1 where
2+
3+foo :: Int
4+foo = 1
examples/docs/src/MultiVirtual2.pursnew file+9
@@ -0,0 +1,9 @@
1+module MultiVirtual2
2+ ( module MultiVirtual2
3+ , module MultiVirtual3
4+ ) where
5+
6+import MultiVirtual3
7+
8+bar :: Int
9+bar = 2
examples/docs/src/MultiVirtual3.pursnew file+4
@@ -0,0 +1,4 @@
1+module MultiVirtual3 where
2+
3+baz :: Int
4+baz = 3
examples/docs/src/NewOperators.purs−7
@@ -3,10 +3,3 @@ module NewOperators
3 where
3 where
4
4
5import NewOperators2
5import NewOperators2
6−
7−module NewOperators2 where
8−
9−infixl 8 _compose as >>>
10−
11−_compose :: forall a b c. (b -> c) -> (a -> b) -> (a -> c)
12−_compose f g x = f (g x)
examples/docs/src/NewOperators2.pursnew file+6
@@ -0,0 +1,6 @@
1+module NewOperators2 where
2+
3+infixl 8 _compose as >>>
4+
5+_compose :: forall a b c. (b -> c) -> (a -> b) -> (a -> c)
6+_compose f g x = f (g x)
examples/docs/src/TypeClassWithoutMembers.purs+2−8
@@ -1,11 +1,5 @@
1module TypeClassWithoutMembers
1module TypeClassWithoutMembers
2− ( module Intermediate )
2+ ( module TypeClassWithoutMembersIntermediate )
3 where
3 where
4
4
5−import Intermediate
5+import TypeClassWithoutMembersIntermediate
6−
7−module Intermediate
8− ( module SomeTypeClass )
9− where
10−
11−import SomeTypeClass (class SomeClass)
examples/docs/src/TypeClassWithoutMembersIntermediate.pursnew file+5
@@ -0,0 +1,5 @@
1+module TypeClassWithoutMembersIntermediate
2+ ( module SomeTypeClass )
3+ where
4+
5+import SomeTypeClass (class SomeClass)
src/Language/PureScript/Parser/Declarations.hs+12−17
@@ -4,7 +4,6 @@
4module Language.PureScript.Parser.Declarations
4module Language.PureScript.Parser.Declarations
5 ( parseDeclaration
5 ( parseDeclaration
6 , parseModule
6 , parseModule
7− , parseModules
8 , parseModulesFromFiles
7 , parseModulesFromFiles
9 , parseValue
8 , parseValue
10 , parseGuard
9 , parseGuard
@@ -258,29 +257,31 @@ parseModule = do
258 exports <- P.optionMaybe $ parens $ commaSep1 parseDeclarationRef
257 exports <- P.optionMaybe $ parens $ commaSep1 parseDeclarationRef
259 reserved "where"
258 reserved "where"
260 decls <- mark (P.many (same *> parseDeclaration))
259 decls <- mark (P.many (same *> parseDeclaration))
260+ _ <- P.eof
261 end <- P.getPosition
261 end <- P.getPosition
262 let ss = SourceSpan (P.sourceName start) (C.toSourcePos start) (C.toSourcePos end)
262 let ss = SourceSpan (P.sourceName start) (C.toSourcePos start) (C.toSourcePos end)
263 return $ Module ss comments name decls exports
263 return $ Module ss comments name decls exports
264
264
265-- | Parse a collection of modules in parallel
265-- | Parse a collection of modules in parallel
266+parseModulesFromFiles
267+ :: forall m k
266−parseModulesFromFiles :: forall m k. (MonadError MultipleErrors m) =>
268+ . MonadError MultipleErrors m
267− (k -> FilePath) -> [(k, String)] -> m [(k, Module)]
269+ => (k -> FilePath)
270+ -> [(k, String)]
271+ -> m [(k, Module)]
268−parseModulesFromFiles toFilePath input = do
272+parseModulesFromFiles toFilePath input =
269− modules <- flip parU id $ map wrapError $ inParallel $ flip map input $ \(k, content) -> do
273+ flip parU wrapError . inParallel . flip map input $ \(k, content) -> do
270 let filename = toFilePath k
274 let filename = toFilePath k
271 ts <- lex filename content
275 ts <- lex filename content
272− ms <- runTokenParser filename parseModules ts
276+ m <- runTokenParser filename parseModule ts
273− return (k, ms)
277+ return (k, m)
274− return $ collect modules
275 where
278 where
276− collect :: [(k, [v])] -> [(k, v)]
277− collect vss = [ (k, v) | (k, vs) <- vss, v <- vs ]
278 wrapError :: Either P.ParseError a -> m a
279 wrapError :: Either P.ParseError a -> m a
279 wrapError = either (throwError . MultipleErrors . pure . toPositionedError) return
280 wrapError = either (throwError . MultipleErrors . pure . toPositionedError) return
280 -- It is enough to force each parse result to WHNF, since success or failure can't be
281 -- It is enough to force each parse result to WHNF, since success or failure can't be
281 -- determined until the end of the file, so this effectively distributes parsing of each file
282 -- determined until the end of the file, so this effectively distributes parsing of each file
282 -- to a different spark.
283 -- to a different spark.
283− inParallel :: [Either P.ParseError (k, [Module])] -> [Either P.ParseError (k, [Module])]
284+ inParallel :: [Either P.ParseError (k, a)] -> [Either P.ParseError (k, a)]
284 inParallel = withStrategy (parList rseq)
285 inParallel = withStrategy (parList rseq)
285
286
286
287
@@ -291,12 +292,6 @@ toPositionedError perr = ErrorMessage [ PositionedError (SourceSpan name start e
291 start = (C.toSourcePos . P.errorPos) perr
292 start = (C.toSourcePos . P.errorPos) perr
292 end = start
293 end = start
293
294
294−-- |
295−-- Parse a collection of modules
296−--
297−parseModules :: TokenParser [Module]
298−parseModules = mark (P.many (same *> parseModule)) <* P.eof
299−
300booleanLiteral :: TokenParser Bool
295booleanLiteral :: TokenParser Bool
301booleanLiteral = (reserved "true" >> return True) P.<|> (reserved "false" >> return False)
296booleanLiteral = (reserved "true" >> return True) P.<|> (reserved "false" >> return False)
302
297
tests/TestDocs.hs+2−2
@@ -266,8 +266,8 @@ testCases =
266 ])
266 ])
267
267
268 , ("TypeClassWithoutMembers",
268 , ("TypeClassWithoutMembers",
269− [ ShouldBeDocumented (n "Intermediate") "SomeClass" []
269+ [ ShouldBeDocumented (n "TypeClassWithoutMembersIntermediate") "SomeClass" []
270− , ChildShouldNotBeDocumented (n "Intermediate") "SomeClass" "member"
270+ , ChildShouldNotBeDocumented (n "TypeClassWithoutMembersIntermediate") "SomeClass" "member"
271 ])
271 ])
272
272
273 , ("NewOperators",
273 , ("NewOperators",