purescript / purescript/trypurescript

Type search "/search" endpoint not working

Offen
#269 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
PureScript
Sterne
121
Forks
51
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

The /search endpoint doesn't seem to work (it's not officially documented, so I'm not sure if it's expected to work)

❯ curl -G --data-urlencode 'q=Unit' https://compile.purescript.org/search
{"error":"Cannot parse type"}% 

I am able to get it "working" locally (maybe not as intended) by stripping the TokLayoutStart and TokLayoutEnd tokens

tryParseType :: Text -> Maybe P.SourceType
tryParseType = hush . fmap (CST.convertType "<file>") . runParser CST.parseTypeP
  where
    hush = either (const Nothing) Just

    runParser :: CST.Parser a -> Text -> Either String a
    runParser p =
      let p' = do
            _ <- CSTM.token CST.TokLayoutStart
            result <- p
            _ <- CSTM.token CST.TokLayoutEnd
            _ <- CSTM.token CST.TokEof
            pure result
      in bimap (CST.prettyPrintError . NE.head) snd
        . CST.runTokenParser p'
        . CST.lexTopLevel

This produces output for certain input

❯ curl -G --data-urlencode 'q=Unit' localhost:8081/search | jq '.'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   784    0   784    0     0    341      0 --:--:--  0:00:02 --:--:--   342
{
  "results": [
    "Control.Subcategory.Closed.assertClosed",
    "Control.Subcategory.HasStart.start",
    "Control.Subcategory.HasUnit.unit",
    "Data.Bounded.bottom",
    "Data.Bounded.top",
    "Data.Bounded.Generic.genericBottom",
    "Data.Bounded.Generic.genericTop",
    "Data.HeytingAlgebra.ff",
    "Data.HeytingAlgebra.tt",
    "Data.HeytingAlgebra.Generic.genericFF",
    "Data.HeytingAlgebra.Generic.genericTT",
    "Data.Monoid.mempty",
    "Data.Monoid.Generic.genericMempty",
    "Data.Ring.Module.mzeroL",
    "Data.Ring.Module.mzeroR",
    "Data.Semiring.one",
    "Data.Semiring.zero",
    "Data.Semiring.Generic.genericOne",
    "Data.Semiring.Generic.genericZero",
    "Data.Typelevel.Undefined.undefined",
    "Data.Unit.unit",
    "Formless.Class.Initial.initial",
    "Options.Applicative.Builder.idm",
    "Partial.crash",
    "Protobuf.Internal.Common.default",
    "Undefined.undefined"
  ]
}

but crashes on List a -> Maybe a (one of @paf31's examples from #55)

❯ curl -G --data-urlencode 'q=List a -> Maybe a' localhost:8081/search
curl: (52) Empty reply from server

q=(a -> f b) -> t a -> f (t b) fails similarly, and in both cases in the server logs I see

An internal error occurred during compilation: Skolem has no kind
Please report this at https://github.com/purescript/purescript/issues
CallStack (from HasCallStack):
  error, called at src/Language/PureScript/Crash.hs:23:3 in purescript-cst-0.4.0.0-BFtByvwp6rF98omNSi831H:Language.PureScript.Crash
  internalError, called at src/Language/PureScript/TypeChecker/Kinds.hs:501:32 in purescript-0.14.5-4MEYSDbbzAH8atq8Yve4k8:Language.PureScript.TypeChecker.Kinds
  elaborateKind, called at src/Language/PureScript/TypeChecker/Unify.hs:70:9 in purescript-0.14.5-4MEYSDbbzAH8atq8Yve4k8:Language.PureScript.TypeChecker.Unify

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Start at the /search endpoint and its tryParseType parser path, reproducing the documented curl queries locally. Trace failures through Language.PureScript.TypeChecker.Kinds at line 501 and Language.PureScript.TypeChecker.Unify at line 70. Done means valid type searches return results or a handled error without the endpoint rejecting basic input or crashing.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Bereich
api, backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.