git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Only allow one module per file
commitef147686b1aa34a6a41adcb3d9877bd6e19ab65a authorGary Burgess <gary.burgess@gmail.com> dateSat 14 May 2016, 19:25 (10 years ago) parent3fbe01d
18 files changed+84−101
examples/docs/src/Clash.purs−28 examples/docs/src/Clash1.purs+3 examples/docs/src/Clash1a.purs+9 examples/docs/src/Clash2.purs+3 examples/docs/src/Clash2a.purs+9 examples/docs/src/ImportedTwice.purs+4−18 examples/docs/src/ImportedTwiceA.purs+8 examples/docs/src/ImportedTwiceB.purs+4 examples/docs/src/MultiVirtual.purs−21 examples/docs/src/MultiVirtual1.purs+4 examples/docs/src/MultiVirtual2.purs+9 examples/docs/src/MultiVirtual3.purs+4 examples/docs/src/NewOperators.purs−7 examples/docs/src/NewOperators2.purs+6 examples/docs/src/TypeClassWithoutMembers.purs+2−8 examples/docs/src/TypeClassWithoutMembersIntermediate.purs+5 src/Language/PureScript/Parser/Declarations.hs+12−17 tests/TestDocs.hs+2−2
examples/docs/src/Clash.purs−28
@@ -2,31 +2,3 @@ module Clash (module Clash1) where
22
33import Clash1 as Clash1
44import 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 @@
44-- re-exports it from Control.Monad.Trans).
55
66module ImportedTwice
7− ( module A
8− , module B
7+ ( module ImportedTwiceA
8+ , module ImportedTwiceB
99 )
1010 where
1111
12−import A
13−import B
14−
15−module A
16− ( module B )
17− where
18−
19−import B
20−
21−bar :: Int
22−bar = 1
23−
24−module B where
25−
26−foo :: Int
27−foo = 0
12+import ImportedTwiceA
13+import ImportedTwiceB
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
44
55import MultiVirtual1 as X
66import 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
33 where
44
55import 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 @@
11module TypeClassWithoutMembers
2− ( module Intermediate )
2+ ( module TypeClassWithoutMembersIntermediate )
33 where
44
5−import Intermediate
6−
7−module Intermediate
8− ( module SomeTypeClass )
9− where
10−
11−import SomeTypeClass (class SomeClass)
5+import TypeClassWithoutMembersIntermediate
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 @@
44module Language.PureScript.Parser.Declarations
55 ( parseDeclaration
66 , parseModule
7− , parseModules
87 , parseModulesFromFiles
98 , parseValue
109 , parseGuard
@@ -258,29 +257,31 @@ parseModule = do
258257 exports <- P.optionMaybe $ parens $ commaSep1 parseDeclarationRef
259258 reserved "where"
260259 decls <- mark (P.many (same *> parseDeclaration))
260+ _ <- P.eof
261261 end <- P.getPosition
262262 let ss = SourceSpan (P.sourceName start) (C.toSourcePos start) (C.toSourcePos end)
263263 return $ Module ss comments name decls exports
264264
265265-- | Parse a collection of modules in parallel
266−parseModulesFromFiles :: forall m k. (MonadError MultipleErrors m) =>
267− (k -> FilePath) -> [(k, String)] -> m [(k, Module)]
268−parseModulesFromFiles toFilePath input = do
269− modules <- flip parU id $ map wrapError $ inParallel $ flip map input $ \(k, content) -> do
266+parseModulesFromFiles
267+ :: forall m k
268+ . MonadError MultipleErrors m
269+ => (k -> FilePath)
270+ -> [(k, String)]
271+ -> m [(k, Module)]
272+parseModulesFromFiles toFilePath input =
273+ flip parU wrapError . inParallel . flip map input $ \(k, content) -> do
270274 let filename = toFilePath k
271275 ts <- lex filename content
272− ms <- runTokenParser filename parseModules ts
273− return (k, ms)
274− return $ collect modules
276+ m <- runTokenParser filename parseModule ts
277+ return (k, m)
275278 where
276− collect :: [(k, [v])] -> [(k, v)]
277− collect vss = [ (k, v) | (k, vs) <- vss, v <- vs ]
278279 wrapError :: Either P.ParseError a -> m a
279280 wrapError = either (throwError . MultipleErrors . pure . toPositionedError) return
280281 -- It is enough to force each parse result to WHNF, since success or failure can't be
281282 -- determined until the end of the file, so this effectively distributes parsing of each file
282283 -- 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)]
284285 inParallel = withStrategy (parList rseq)
285286
286287
@@ -291,12 +292,6 @@ toPositionedError perr = ErrorMessage [ PositionedError (SourceSpan name start e
291292 start = (C.toSourcePos . P.errorPos) perr
292293 end = start
293294
294−-- |
295−-- Parse a collection of modules
296−--
297−parseModules :: TokenParser [Module]
298−parseModules = mark (P.many (same *> parseModule)) <* P.eof
299−
300295booleanLiteral :: TokenParser Bool
301296booleanLiteral = (reserved "true" >> return True) P.<|> (reserved "false" >> return False)
302297
tests/TestDocs.hs+2−2
@@ -266,8 +266,8 @@ testCases =
266266 ])
267267
268268 , ("TypeClassWithoutMembers",
269− [ ShouldBeDocumented (n "Intermediate") "SomeClass" []
270− , ChildShouldNotBeDocumented (n "Intermediate") "SomeClass" "member"
269+ [ ShouldBeDocumented (n "TypeClassWithoutMembersIntermediate") "SomeClass" []
270+ , ChildShouldNotBeDocumented (n "TypeClassWithoutMembersIntermediate") "SomeClass" "member"
271271 ])
272272
273273 , ("NewOperators",