purescript / purescript/trypurescript

Type search "/search" endpoint not working

Abierto
#269 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
PureScript
Estrellas
121
Forks
51
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Área
api, backend
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.