Skip to content

Commit e82f768

Browse files
committed
Fix parsing of tuples in type sigs for definition-search
1 parent 936753b commit e82f768

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

src/Share/Web/Share/DefinitionSearch.hs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,15 @@ type P = MP.Parsec QueryError Text
106106
--
107107
-- Horribly misshapen query:
108108
-- >>> queryToTokens "[{ &Text !{𝕖} (Optional)"
109-
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Optional"} :| []))) (Count 1),TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Nothing)
109+
-- WAS WAS WAS WAS WAS WAS WAS WAS Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Optional"} :| []))) (Count 1),TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Nothing)
110+
-- WAS WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
111+
-- WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
112+
-- WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
113+
-- WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
114+
-- WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
115+
-- WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
116+
-- WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
117+
-- NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
110118
--
111119
-- >>> queryToTokens "e -> abilities.Exception"
112120
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Exception"} :| [NameSegment {toUnescapedText = "abilities"}]))) ReturnPosition,TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Exception"} :| [NameSegment {toUnescapedText = "abilities"}]))) (Count 1),TypeVarToken 0 (Count 1)],Just 1)
@@ -116,6 +124,12 @@ type P = MP.Parsec QueryError Text
116124
--
117125
-- >>> queryToTokens "Nat -> Text"
118126
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Nat"} :| []))) (Count 1),TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) ReturnPosition,TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Just 1)
127+
--
128+
-- >>> queryToTokens "(a, b) -> (a -> c) -> (c, b)"
129+
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Tuple"} :| []))) ReturnPosition,TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Tuple"} :| []))) (Count 2),TypeVarToken 0 (Count 1),TypeVarToken 1 (Count 1)],Just 2)
130+
--
131+
-- >>> queryToTokens "Text -> ()"
132+
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Just 1)
119133
queryToTokens :: Text -> Either Text (Set (DefnSearchToken (Either Name ShortHash)), Maybe Arity)
120134
queryToTokens query =
121135
let cleanQuery =
@@ -244,12 +258,12 @@ typeQueryP = do
244258

245259
-- We just ignore units for now, they don't contribute much to the search.
246260
unitP :: P Tokens
247-
unitP = MP.choice [MP.string "()", MP.string "Unit", MP.string "'"] $> mempty
261+
unitP = lexeme $ MP.choice [MP.string "()", MP.string "Unit", MP.string "'"] $> mempty
248262

249263
tupleP :: P Tokens
250264
tupleP = MP.between (MP.char '(') (MP.char ')') do
251265
typeQueryP
252-
_ <- MP.char ','
266+
_ <- lexeme (MP.char ',')
253267
typeQueryP
254268
pure $ MonMap.singleton (TypeNameMention (Name.unsafeParseText "Tuple")) 1
255269

0 commit comments

Comments
 (0)