1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
module Check.ImportExport (impDeclCheck, expSpecCheck) where
import AST.Ident
import AST.PositionUtils
import AST.Span (Pos, start)
import AST.SpanAST
import Check.Types (CheckF, Message (..))
import Config.ReadConfig (shallCheck)
import Config.Types (Check (..))
import Utils (condMsg)
impDeclCheck :: CheckF ImportDecl
impDeclCheck (ImportDecl s _ mid _ _ _ mis)
| shallCheck CImport = case mis of
Just _ -> []
Nothing ->
condMsg
(not (midQualifiers mid == ["Prelude"]))
[Message (start s)
$ "List imported entities explicitly "
++ "(unless there are too many)."]
| otherwise = []
expSpecCheck :: CheckF ExportSpec
expSpecCheck (Exporting sl _ ss sr)
= condMsg (shallCheck CExportList && not (validExport (start sl) (map start ss) (start sr)))
[Message (start sl)
"Exportlist: Parens and Commas are not aligned correctly."]
validExport :: Pos -> [Pos] -> Pos -> Bool
validExport pl ps pr
| (null ps) = True
| otherwise =
(col (head ps) == col pl) && (allColEq ps) && (col pl == col pr)
||
(line (head ps) == line pl) && (allLinesEq ps) && (line pl == line pr)
|