1
1
mirror of https://github.com/github/semantic.git synced 2024-12-22 22:31:36 +03:00
semantic/src/Category.hs

221 lines
4.7 KiB
Haskell
Raw Normal View History

{-# OPTIONS_GHC -funbox-strict-fields #-}
module Category where
2015-11-18 22:23:35 +03:00
import Prologue
2016-07-28 20:48:44 +03:00
import Test.QuickCheck hiding (Args)
import Data.Text.Arbitrary()
2015-11-18 22:23:35 +03:00
2016-02-05 00:35:42 +03:00
-- | A standardized category of AST node. Used to determine the semantics for
-- | semantic diffing and define comparability of nodes.
data Category
-- | The top-level branch node.
= Program
2016-06-04 01:37:40 +03:00
-- | A node indicating syntax errors.
| Error
2016-06-16 17:54:05 +03:00
-- | A boolean expression.
| Boolean
-- | A bitwise operator.
| BitwiseOperator
2016-09-17 01:20:36 +03:00
-- | A boolean operator (e.g. ||, &&).
| BooleanOperator
2016-02-05 00:35:42 +03:00
-- | A literal key-value data structure.
2016-02-06 00:59:38 +03:00
| DictionaryLiteral
2016-02-14 05:01:52 +03:00
-- | A pair, e.g. of a key & value
| Pair
2016-02-06 00:54:08 +03:00
-- | A call to a function.
| FunctionCall
2016-06-10 22:19:29 +03:00
-- | A function declaration.
2016-06-10 20:11:32 +03:00
| Function
2016-06-10 22:19:29 +03:00
-- | An identifier.
| Identifier
2016-06-12 21:29:48 +03:00
-- | A function's parameters.
| Params
2016-06-12 21:29:48 +03:00
-- | A function's expression statements.
| ExpressionStatements
-- | A method call on an object.
| MethodCall
2016-06-14 19:53:35 +03:00
-- | A method's arguments.
| Args
-- | A string literal.
| StringLiteral
-- | An integer literal.
| IntegerLiteral
-- | A regex literal.
| Regex
-- | A return statement.
| Return
-- | A symbol literal.
| SymbolLiteral
2016-06-15 18:38:16 +03:00
-- | A template string literal.
| TemplateString
2016-03-03 07:01:46 +03:00
-- | An array literal.
| ArrayLiteral
2016-06-14 01:31:45 +03:00
-- | An assignment expression.
2016-06-14 00:31:32 +03:00
| Assignment
-- | A math assignment expression.
| MathAssignment
2016-06-14 01:31:45 +03:00
-- | A member access expression.
| MemberAccess
2016-06-17 22:38:12 +03:00
-- | A subscript access expression.
| SubscriptAccess
-- | A variable assignment within a variable declaration.
| VarAssignment
-- | A variable declaration.
| VarDecl
2016-06-17 23:31:50 +03:00
-- | A switch expression.
2016-06-16 01:48:27 +03:00
| Switch
2016-08-12 00:39:44 +03:00
-- | A if/else expression.
| If
2016-07-28 20:48:44 +03:00
-- | A for expression.
| For
2016-07-28 21:00:28 +03:00
-- | A while expression.
| While
-- | A do/while expression.
| DoWhile
2016-06-17 23:31:40 +03:00
-- | A ternary expression.
| Ternary
2016-06-17 23:31:50 +03:00
-- | A case expression.
2016-06-16 01:48:27 +03:00
| Case
2016-06-18 01:02:54 +03:00
-- | An expression with an operator.
| Operator
2016-08-16 22:44:02 +03:00
-- | An comma operator expression
| CommaOperator
2016-06-24 00:39:27 +03:00
-- | An object/dictionary/hash literal.
| Object
2016-07-29 22:32:54 +03:00
-- | A throw statement.
| Throw
2016-07-30 21:25:52 +03:00
-- | A constructor statement, e.g. new Foo;
| Constructor
2016-07-29 22:58:49 +03:00
-- | A try statement.
| Try
-- | A catch statement.
| Catch
-- | A finally statement.
| Finally
2016-07-29 23:28:27 +03:00
-- | A class declaration.
| Class
2016-07-30 06:41:21 +03:00
-- | A class method declaration.
| Method
-- | A comment.
| Comment
2016-02-05 00:35:42 +03:00
-- | A non-standard category, which can be used for comparability.
| Other Text
-- | A relational operator (e.g. < or >=)
| RelationalOperator
2016-08-19 22:53:04 +03:00
-- | An empty statement. (e.g. ; in JavaScript)
| Empty
2016-09-13 07:06:53 +03:00
-- | A number literal.
| NumberLiteral
2016-09-17 01:20:55 +03:00
-- | A mathematical operator (e.g. +, -, *, /).
| MathOperator
2016-10-04 01:18:09 +03:00
-- | A module
| Module
2016-10-06 23:18:09 +03:00
-- | An import
| Import
-- | An export
| Export
-- | An anonymous function.
2016-11-01 21:36:23 +03:00
| AnonymousFunction
2016-10-24 20:43:31 +03:00
-- | An interpolation (e.g. "#{bar}" in Ruby)
2016-10-21 23:55:00 +03:00
| Interpolation
2016-10-24 20:43:31 +03:00
-- | A subshell command (e.g. `ls -la` in Ruby)
| Subshell
-- | A conditional assignment expression.
| ConditionalAssignment
2016-10-26 20:27:38 +03:00
-- | A yield statement.
| Yield
-- | An until expression.
| Until
-- | A unless/else expression.
| Unless
2016-11-02 20:52:40 +03:00
| Begin
2016-11-02 21:10:01 +03:00
| Else
2016-11-02 22:32:46 +03:00
| Elsif
| Ensure
2016-11-02 23:05:30 +03:00
| Rescue
2016-11-03 19:23:35 +03:00
| RescueModifier
2016-11-02 23:42:06 +03:00
| When
2016-11-07 19:00:06 +03:00
| RescuedException
2016-11-08 01:23:17 +03:00
| Negate
2016-11-15 01:47:04 +03:00
-- | A select expression in Go.
| Select
| Defer
| Go
deriving (Eq, Generic, Ord, Show)
2016-06-23 16:55:48 +03:00
2016-06-23 23:25:49 +03:00
-- Instances
2016-06-23 16:55:48 +03:00
instance Hashable Category
instance Arbitrary Category where
arbitrary = oneof [
2016-07-17 18:18:31 +03:00
pure Program
, pure Error
, pure Boolean
2016-09-17 01:20:36 +03:00
, pure BooleanOperator
2016-09-17 01:20:55 +03:00
, pure MathOperator
, pure DictionaryLiteral
, pure Pair
, pure FunctionCall
, pure Function
, pure Identifier
, pure Params
, pure ExpressionStatements
, pure MethodCall
, pure Args
, pure StringLiteral
, pure IntegerLiteral
2016-09-13 07:06:53 +03:00
, pure NumberLiteral
, pure Regex
, pure Return
, pure SymbolLiteral
, pure TemplateString
, pure ArrayLiteral
, pure Assignment
, pure MathAssignment
, pure MemberAccess
, pure SubscriptAccess
, pure VarAssignment
, pure VarDecl
2016-07-28 21:00:28 +03:00
, pure For
, pure DoWhile
, pure While
, pure Switch
, pure Ternary
, pure Case
, pure Operator
, pure Object
, pure Throw
, pure Constructor
, pure Try
, pure Catch
, pure Finally
, pure Class
, pure Method
2016-10-04 01:18:09 +03:00
, pure Module
2016-10-06 23:18:09 +03:00
, pure Import
, pure Export
2016-10-21 23:55:00 +03:00
, pure Interpolation
2016-10-24 20:43:31 +03:00
, pure Subshell
, pure ConditionalAssignment
2016-10-26 20:27:38 +03:00
, pure Yield
, pure Until
, pure Unless
2016-11-02 20:52:40 +03:00
, pure Begin
2016-11-02 21:10:01 +03:00
, pure Else
2016-11-02 22:32:46 +03:00
, pure Elsif
, pure Ensure
2016-11-02 23:05:30 +03:00
, pure Rescue
2016-11-03 19:23:35 +03:00
, pure RescueModifier
2016-11-02 23:42:06 +03:00
, pure When
2016-11-07 19:00:06 +03:00
, pure RescuedException
2016-11-08 01:23:17 +03:00
, pure Negate
, pure Select
, pure Defer
, pure Go
, Other <$> arbitrary
]
shrink (Other s) = Other <$> shrink s
shrink _ = []