1
1
mirror of https://github.com/github/semantic.git synced 2024-12-21 13:51:44 +03:00

Add type assertions

This commit is contained in:
joshvera 2016-11-21 15:27:06 -05:00
parent 231310a484
commit 83453dd54f
4 changed files with 9 additions and 0 deletions

View File

@ -142,6 +142,7 @@ data Category
| Defer
| Go
| Slice
| TypeAssertion
deriving (Eq, Generic, Ord, Show)
-- Instances
@ -215,6 +216,7 @@ instance Arbitrary Category where
, pure Defer
, pure Go
, pure Slice
, pure TypeAssertion
, Other <$> arbitrary
]

View File

@ -179,6 +179,7 @@ toLeafInfos leaf = pure . flip JSONSummary (sourceSpan leaf) $ case leaf of
-- Returns a text representing a specific term given a source and a term.
toTermName :: forall leaf fields. (HasCategory leaf, DefaultFields fields) => Source Char -> SyntaxTerm leaf fields -> Text
toTermName source term = case unwrap term of
S.TypeAssertion _ _ -> termNameFromSource term
S.Go expr -> toTermName' expr
S.Defer expr -> toTermName' expr
S.AnonymousFunction params _ -> "anonymous" <> paramsToArgNames params
@ -400,6 +401,7 @@ instance HasCategory Category where
C.Go -> "go statement"
C.Slice -> "slice expression"
C.Defer -> "defer statement"
C.TypeAssertion -> "type assertion"
instance HasField fields Category => HasCategory (SyntaxTerm leaf fields) where
toCategoryName = toCategoryName . category . extract

View File

@ -56,6 +56,9 @@ termConstructor source sourceSpan name range children = case (name, children) of
("selector_expression", children) -> withDefaultInfo $ toSubscriptAccess children
("index_expression", children) -> withDefaultInfo $ toSubscriptAccess children
("slice_expression", children) -> sliceToSubscriptAccess children
("type_assertion_expression", children) -> withDefaultInfo $ case children of
[a, b] -> S.TypeAssertion a b
rest -> S.Error rest
-- TODO: Handle multiple var specs
("var_declaration", varSpecs) -> withDefaultInfo . S.Indexed =<< mapM toVarDecl varSpecs
("short_var_declaration", children) -> listToVarDecls children
@ -170,5 +173,6 @@ categoryForGoName = \case
"communication_case" -> Case
"defer_statement" -> Defer
"go_statement" -> Go
"type_assertion_expression" -> TypeAssertion
s -> Other (toS s)

View File

@ -86,6 +86,7 @@ data Syntax a f
| Rescue [f] [f]
| Go f
| Defer f
| TypeAssertion f f
deriving (Eq, Foldable, Functor, Generic, Generic1, Mergeable, Ord, Show, Traversable, ToJSON)