@@ -598,6 +598,15 @@ getPriority = listToMaybe . mapMaybe getP
598598 | p == " N_PRIORITIES" = Just NPriorities
599599 getP _ = Nothing
600600
601+ isHidden
602+ :: [Annotation Loc ]
603+ -> [StructuredAnnotation 'Resolved l Loc ]
604+ -> Bool
605+ isHidden anns sAnns =
606+ any (\ a -> case a of
607+ SimpleAnn {saTag = " hs.hidden" } -> True ; _ -> False ) anns
608+ || hasResolvedAnn " Hidden" sAnns
609+
601610resolveField
602611 :: Typecheckable l
603612 => [Annotation Loc ]
@@ -609,16 +618,12 @@ resolveField anns structSAnns sname field@Field{..} = do
609618 when (fieldId == 0 ) $
610619 typeError (lLocation $ flId fieldLoc) $ InvalidFieldId fieldName 0
611620 sAnns <- resolveStructuredAnns fieldSAnns
621+ -- Filter out hidden fields
622+ if isHidden (getAnns fieldAnns) sAnns then pure Nothing else do
612623 thisty <- resolveAnnotatedType sAnns fieldType
613624 case thisty of
614625 Some ty -> do
615626 val <- sequence (typecheckConst ty <$> fieldVal)
616- -- Filter out hidden fields
617- let hidden = any (\ a -> case a of
618- SimpleAnn {saTag = " hs.hidden" } -> True ; _ -> False )
619- (getAnns fieldAnns)
620- || hasResolvedAnn " Hidden" sAnns
621- if hidden then pure Nothing else do
622627 lazy <- case filterHsAnns $ getAnns fieldAnns of
623628 [SimpleAnn {.. }]
624629 | saTag == " hs.strict" -> pure Strict
@@ -989,10 +994,14 @@ mkConstMap (thriftName, opts) pkg imap tmap smap = foldM insertC emptyContext
989994 -> ConstMap l
990995 -> Parsed (Field u )
991996 -> Either [TypeError l ] (ConstMap l )
992- insFieldName opts' resolvedSAnns scope field@ Field {.. } =
997+ insFieldName opts' resolvedSAnns scope field@ Field {.. } = do
998+ sAnns <- runTypechecker env $
999+ resolveStructuredAnnsOptional fieldSAnns
1000+ if isHidden (getAnns fieldAnns) sAnns then return scope else do
9931001 addToScope (lLocation $ flName fieldLoc)
994- (renameField opts' (getAnns structAnns) resolvedSAnns structName field)
995- scope
1002+ (renameField opts' (getAnns structAnns)
1003+ resolvedSAnns structName field)
1004+ scope
9961005
9971006 -- Unions define data constructors
9981007 insertC m (D_Union u@ Union {.. })
@@ -1823,6 +1832,10 @@ mkSchema Struct{..} = do
18231832 buildSchema resolvedSAnns structMembers
18241833 where
18251834 buildSchema resolvedSAnns (field@ Field {.. } : fields) = do
1835+ sAnns <- resolveStructuredAnnsOptional fieldSAnns
1836+ if isHidden (getAnns fieldAnns) sAnns
1837+ then buildSchema resolvedSAnns fields
1838+ else do
18261839 (rty, tschema) <- (,)
18271840 <$> resolveAnnotatedType [] fieldType
18281841 <*> buildSchema resolvedSAnns fields
0 commit comments