Hardcode more precedences

ghc92
Lennart Spitzner 2023-04-29 12:35:59 +00:00
parent 884c7da97c
commit fe876ea0b0
1 changed files with 134 additions and 5 deletions

View File

@ -99,10 +99,11 @@ balanceOpTree allowUnqualify = \case
(warns, OpKnown paren locO locC fixity c cs)
Right t -> (warns, t)
Left moreWarns ->
( warns
++ [ LayoutWarning ("Fixity of operator not known: " ++ w)
| w <- moreWarns
]
( ( warns
++ [ LayoutWarning ("Fixity of operator not known: " ++ w)
| w <- moreWarns
]
)
, x
)
where
@ -255,9 +256,17 @@ hardcodedFixity allowUnqualify = \case
"!<<." -> Just $ Fixity NoSourceText 8 InfixL
">=>" -> Just $ Fixity NoSourceText 1 InfixR
"<=<" -> Just $ Fixity NoSourceText 1 InfixR
"&&&" -> Just $ Fixity NoSourceText 3 InfixR
"<$!>" -> fixity InfixL 4
"~" -> fixity InfixN 4
"~~" -> fixity InfixN 4
":~:" -> Just $ Fixity NoSourceText 4 InfixN
":~~:" -> Just $ Fixity NoSourceText 4 InfixN
":+:" -> fixity InfixR 5
":*:" -> fixity InfixR 6
":.:" -> fixity InfixR 7
":|" -> fixity InfixR 5
-- non-base from random sources.
"<|" -> Just $ Fixity NoSourceText 5 InfixR
@ -269,7 +278,126 @@ hardcodedFixity allowUnqualify = \case
":?" -> Just $ Fixity NoSourceText 7 InfixN
":-" -> Just $ Fixity NoSourceText 9 InfixR
".:" -> Just $ Fixity NoSourceText 9 InfixR
".=" -> Just $ Fixity NoSourceText 8 InfixR
"$!!" -> fixity InfixR 0
"<$!!>" -> fixity InfixL 4
-- lens, not complete!
"<|" -> fixity InfixR 5
"|>" -> fixity InfixL 5
"%~" -> fixity InfixR 4
".~" -> fixity InfixR 4
"?~" -> fixity InfixR 4
"<.~" -> fixity InfixR 4
"<?~" -> fixity InfixR 4
"+~" -> fixity InfixR 4
"*~" -> fixity InfixR 4
"-~" -> fixity InfixR 4
"//~" -> fixity InfixR 4
"^~" -> fixity InfixR 4
"^^~" -> fixity InfixR 4
"**~" -> fixity InfixR 4
"||~" -> fixity InfixR 4
"&&~" -> fixity InfixR 4
".=" -> fixity InfixN 4
"%=" -> fixity InfixN 4
"?=" -> fixity InfixN 4
"+=" -> fixity InfixN 4
"-=" -> fixity InfixN 4
"*=" -> fixity InfixN 4
"//=" -> fixity InfixN 4
"^=" -> fixity InfixN 4
"^^=" -> fixity InfixN 4
"**=" -> fixity InfixN 4
"&&=" -> fixity InfixN 4
"||=" -> fixity InfixN 4
"<~" -> fixity InfixR 2
"<.=" -> fixity InfixN 4
"<?=" -> fixity InfixN 4
"<>~" -> fixity InfixR 4
"<>=" -> fixity InfixN 4
"^.." -> fixity InfixL 8
"^?" -> fixity InfixL 8
"^?!" -> fixity InfixL 8
"^@.." -> fixity InfixL 8
"^@?" -> fixity InfixL 8
"^@?!" -> fixity InfixL 8
"^." -> fixity InfixL 8
"^@." -> fixity InfixL 8
"<." -> fixity InfixR 9
".>" -> fixity InfixR 9
"<.>" -> fixity InfixR 9
"@@~" -> fixity InfixR 4
"@@=" -> fixity InfixR 4
"&~" -> fixity InfixL 1
"??" -> fixity InfixL 1
-- certain other operators
-- "%." -> Just $ Fixity NoSourceText _ _
-- "%==" -> Just $ Fixity NoSourceText _ _
-- "%=>%" -> Just $ Fixity NoSourceText _ _
-- "&*" -> Just $ Fixity NoSourceText _ _
-- "&/" -> Just $ Fixity NoSourceText _ _
-- "&=" -> Just $ Fixity NoSourceText _ _
-- "-->" -> Just $ Fixity NoSourceText _ _
-- ".*?" -> fixity _ _
-- ".+." -> fixity _ _
-- ".-." -> fixity _ _
".&." -> fixity InfixR 1
".&&." -> fixity InfixR 1
".||." -> fixity InfixR 1
"==>" -> fixity InfixR 0
"=/=" -> fixity InfixN 4
"===" -> fixity InfixN 4
".:!" -> fixity InfixL 9
".:?" -> fixity InfixL 9
-- ".:>" -> fixity _ _
-- ".:>?" -> fixity _ _
"<.>" -> fixity InfixR 7
"</>" -> fixity InfixR 5
"<?>" -> fixity InfixL 9
-- "~" -> fixity _ _
"===" -> fixity InfixN 4
"!?" -> fixity InfixL 9
"%==" -> fixity InfixN 3
".*" -> fixity InfixR 8
".**" -> fixity InfixR 8
".***" -> fixity InfixR 8
":?-" -> fixity InfixN 1
"::-" -> fixity InfixN 0
"&!" -> fixity InfixL 1
-- quickcheck (-state-machine)
":&&" -> fixity InfixL 9
":||" -> fixity InfixL 9
":&&:" -> fixity InfixL 9
":=>" -> fixity InfixL 9
":==" -> fixity InfixL 9
":/=" -> fixity InfixL 9
":<" -> fixity InfixL 9
":<=" -> fixity InfixL 9
":>" -> fixity InfixL 9
":>=" -> fixity InfixL 9
":->" -> fixity InfixL 9
-- servant
":>" -> fixity InfixR 4
":<|>" -> fixity InfixR 3
":-" -> fixity InfixL 0
-- postgresql-simple
":." -> fixity InfixR 3 -- this has wildly different fixities in different libraries
-- ?
-- ":-:" -> fixity _ _
-- ":." -> fixity _ _
-- ":/:" -> fixity _ _
-- "::->" -> fixity _ _
-- ":<:" -> fixity _ _
-- ":<=:" -> fixity _ _
-- ":=:" -> fixity _ _
-- ":>:" -> fixity _ _
-- ":>=:" -> fixity _ _
str -> case (Safe.headMay str, Safe.lastMay str) of
(Just '\'', _) -> hardcodedFixity False (drop 1 str)
@ -277,3 +405,4 @@ hardcodedFixity allowUnqualify = \case
(Just c, _) | Data.Char.isAlpha c && allowUnqualify -> hardcodedFixity False
$ dropWhile (\x -> (Data.Char.isAlpha x || x == '.')) str
_ -> Nothing
where fixity a b = Just (Fixity NoSourceText b a)