Skip to content

Commit

Permalink
Don't ignore type vars in tuples
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisPenner committed Jul 30, 2024
1 parent e82f768 commit 9a9b531
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions src/Share/Web/Share/DefinitionSearch.hs
Original file line number Diff line number Diff line change
Expand Up @@ -106,15 +106,17 @@ type P = MP.Parsec QueryError Text
--
-- Horribly misshapen query:
-- >>> queryToTokens "[{ &Text !{𝕖} (Optional)"
-- 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)
-- WAS WAS 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)
-- WAS WAS WAS WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS WAS WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
-- WAS NOW Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Optional"} :| []))) (Count 1),TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Nothing)
-- NOW Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Optional"} :| []))) (Count 1),TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Nothing)
--
-- >>> queryToTokens "e -> abilities.Exception"
-- 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)
Expand All @@ -126,10 +128,17 @@ type P = MP.Parsec QueryError Text
-- 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)
--
-- >>> queryToTokens "(a, b) -> (a -> c) -> (c, b)"
-- 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)
-- WAS 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)
-- NOW Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Tuple"} :| []))) ReturnPosition,TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Tuple"} :| []))) (Count 2),TypeVarToken 0 (Count 2),TypeVarToken 1 ReturnPosition,TypeVarToken 1 (Count 2),TypeVarToken 2 ReturnPosition,TypeVarToken 2 (Count 2)],Just 2)
--
-- >>> queryToTokens "Text -> ()"
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Just 1)
--
-- >>> queryToTokens "(a,b) -> a "
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Tuple"} :| []))) (Count 1),TypeVarToken 0 (Count 1),TypeVarToken 1 ReturnPosition,TypeVarToken 1 (Count 2)],Just 1)
--
-- >>> queryToTokens "Tuple a b -> a"
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Tuple"} :| []))) (Count 1),TypeVarToken 0 (Count 1),TypeVarToken 1 ReturnPosition,TypeVarToken 1 (Count 2)],Just 1)
queryToTokens :: Text -> Either Text (Set (DefnSearchToken (Either Name ShortHash)), Maybe Arity)
queryToTokens query =
let cleanQuery =
Expand Down Expand Up @@ -262,10 +271,11 @@ unitP = lexeme $ MP.choice [MP.string "()", MP.string "Unit", MP.string "'"] $>

tupleP :: P Tokens
tupleP = MP.between (MP.char '(') (MP.char ')') do
typeQueryP
(_, before, _) <- typeQueryP
_ <- lexeme (MP.char ',')
typeQueryP
pure $ MonMap.singleton (TypeNameMention (Name.unsafeParseText "Tuple")) 1
(_, after, _) <- typeQueryP
let tupleTokens = MonMap.singleton (TypeNameMention (Name.unsafeParseText "Tuple")) 1
pure $ before <> tupleTokens <> after

listP :: P Tokens
listP = MP.between (lexeme (MP.char '[')) (lexeme (MP.char ']')) do
Expand Down

0 comments on commit 9a9b531

Please sign in to comment.