Skip to content

Commit 6a15df0

Browse files
committed
structured annotations #12: Fixes for hs.hidden
1 parent ec09ed4 commit 6a15df0

1 file changed

Lines changed: 22 additions & 9 deletions

File tree

compiler/Thrift/Compiler/Typechecker.hs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
601610
resolveField
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

Comments
 (0)