From f5364c5a3f2de6455e9a889fe873b7a43eeb5879 Mon Sep 17 00:00:00 2001 From: Chris Penner Date: Wed, 24 Jul 2024 14:53:54 -0700 Subject: [PATCH] Fix formatting of definitions response --- docker/docker-compose.yml | 2 +- .../BackgroundJobs/Search/DefinitionSync.hs | 10 ++++++- src/Share/Web/Share/Types.hs | 30 ++++++++++++++++--- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index f1cfab2..2e73248 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -20,7 +20,7 @@ services: # Optionally persist the data between container invocations - postgresVolume:/var/lib/postgresql/data - ./postgresql.conf:/etc/postgresql/postgresql.conf - command: postgres -c config_file=/etc/postgresql/postgresql.conf + command: postgres -c config_file=/etc/postgresql/postgresql.conf # -c log_statement=all redis: diff --git a/src/Share/BackgroundJobs/Search/DefinitionSync.hs b/src/Share/BackgroundJobs/Search/DefinitionSync.hs index 3fa30ec..aa8bb50 100644 --- a/src/Share/BackgroundJobs/Search/DefinitionSync.hs +++ b/src/Share/BackgroundJobs/Search/DefinitionSync.hs @@ -43,6 +43,7 @@ import Unison.Debug qualified as Debug import Unison.HashQualifiedPrime qualified as HQ' import Unison.LabeledDependency qualified as LD import Unison.Name (Name) +import Unison.Name qualified as Name import Unison.PrettyPrintEnv qualified as PPE import Unison.PrettyPrintEnvDecl qualified as PPED import Unison.PrettyPrintEnvDecl.Postgres qualified as PPEPostgres @@ -123,7 +124,14 @@ syncTerms namesPerspective bhId projectId releaseId termsCursor = do PG.timeTransaction "Building terms" $ terms & foldMapM \(fqn, ref) -> fmap (either (\err -> ([err], [])) (\doc -> ([], [doc]))) . runExceptT $ do typ <- lift (Codebase.loadTypeOfReferent ref) `whenNothingM` throwError (NoTypeSigForTerm fqn ref) - termSummary <- lift $ Summary.termSummaryForReferent ref typ (Just fqn) bhId Nothing Nothing + let displayName = + fqn + & Name.reverseSegments + -- For now we treat the display name for search as just the last 2 segments of the name. + & \case + (ns :| rest) -> ns :| take 1 rest + & Name.fromReverseSegments + termSummary <- lift $ Summary.termSummaryForReferent ref typ (Just displayName) bhId Nothing Nothing let sh = Referent.toShortHash ref let (refTokens, arity) = tokensForTerm fqn ref typ termSummary let dd = diff --git a/src/Share/Web/Share/Types.hs b/src/Share/Web/Share/Types.hs index 5ac6c82..1c2764e 100644 --- a/src/Share/Web/Share/Types.hs +++ b/src/Share/Web/Share/Types.hs @@ -16,6 +16,7 @@ import Share.Utils.API (NullableUpdate, parseNullableUpdate) import Share.Utils.URI import Unison.Name (Name) import Unison.Server.Doc (Doc) +import Unison.Server.Share.DefinitionSummary.Types (TermSummary (..), TypeSummary (..)) data UpdateUserRequest = UpdateUserRequest { name :: NullableUpdate Text, @@ -189,8 +190,29 @@ data DefinitionSearchResult instance ToJSON DefinitionSearchResult where toJSON DefinitionSearchResult {..} = Aeson.object - [ "fqn" .= fqn, - "summary" .= summary, - "project" .= project, - "release" .= release + [ "fqn" Aeson..= fqn, + "projectRef" Aeson..= project, + "branchRef" Aeson..= release, + "kind" Aeson..= kind, + "definition" Aeson..= definition ] + where + (kind, definition) = case summary of + DefSync.ToTTermSummary TermSummary {displayName, hash, summary, tag} -> + ( Aeson.String "term", + Aeson.object + [ "displayName" Aeson..= displayName, + "hash" Aeson..= hash, + "summary" Aeson..= summary, + "tag" Aeson..= tag + ] + ) + DefSync.ToTTypeSummary TypeSummary {displayName, hash, summary, tag} -> + ( Aeson.String "type", + Aeson.object + [ "displayName" Aeson..= displayName, + "hash" Aeson..= hash, + "summary" Aeson..= summary, + "tag" Aeson..= tag + ] + )