Skip to content

Commit 9a9b531

Browse files
committed
Don't ignore type vars in tuples
1 parent e82f768 commit 9a9b531

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

src/Share/Web/Share/DefinitionSearch.hs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,17 @@ type P = MP.Parsec QueryError Text
106106
--
107107
-- Horribly misshapen query:
108108
-- >>> queryToTokens "[{ &Text !{𝕖} (Optional)"
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)
109+
-- 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)
110+
-- 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"
111+
-- WAS WAS WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
110112
-- WAS WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
111113
-- WAS WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
112114
-- WAS WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
113115
-- WAS WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
114116
-- WAS WAS WAS NOW Left "query:1:4:\n |\n1 | [{ &Text !{} (Optional)\n | ^\nunexpected '&'\nexpecting \"->\", ']', '}', or white space\n"
115117
-- 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"
118+
-- WAS NOW Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Optional"} :| []))) (Count 1),TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Nothing)
119+
-- NOW Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Optional"} :| []))) (Count 1),TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Nothing)
118120
--
119121
-- >>> queryToTokens "e -> abilities.Exception"
120122
-- 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)
@@ -126,10 +128,17 @@ type P = MP.Parsec QueryError Text
126128
-- 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)
127129
--
128130
-- >>> 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)
131+
-- 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)
132+
-- 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)
130133
--
131134
-- >>> queryToTokens "Text -> ()"
132135
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Text"} :| []))) (Count 1)],Just 1)
136+
--
137+
-- >>> queryToTokens "(a,b) -> a "
138+
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Tuple"} :| []))) (Count 1),TypeVarToken 0 (Count 1),TypeVarToken 1 ReturnPosition,TypeVarToken 1 (Count 2)],Just 1)
139+
--
140+
-- >>> queryToTokens "Tuple a b -> a"
141+
-- Right (fromList [TypeMentionToken (Left (Name Relative (NameSegment {toUnescapedText = "Tuple"} :| []))) (Count 1),TypeVarToken 0 (Count 1),TypeVarToken 1 ReturnPosition,TypeVarToken 1 (Count 2)],Just 1)
133142
queryToTokens :: Text -> Either Text (Set (DefnSearchToken (Either Name ShortHash)), Maybe Arity)
134143
queryToTokens query =
135144
let cleanQuery =
@@ -262,10 +271,11 @@ unitP = lexeme $ MP.choice [MP.string "()", MP.string "Unit", MP.string "'"] $>
262271

263272
tupleP :: P Tokens
264273
tupleP = MP.between (MP.char '(') (MP.char ')') do
265-
typeQueryP
274+
(_, before, _) <- typeQueryP
266275
_ <- lexeme (MP.char ',')
267-
typeQueryP
268-
pure $ MonMap.singleton (TypeNameMention (Name.unsafeParseText "Tuple")) 1
276+
(_, after, _) <- typeQueryP
277+
let tupleTokens = MonMap.singleton (TypeNameMention (Name.unsafeParseText "Tuple")) 1
278+
pure $ before <> tupleTokens <> after
269279

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

0 commit comments

Comments
 (0)