1
1
mirror of https://github.com/github/semantic.git synced 2024-11-28 10:15:55 +03:00

Merge pull request #981 from github/method-declaration-receiver

Add receiver to shape of Method
This commit is contained in:
Timothy Clem 2017-02-07 15:48:56 -08:00 committed by GitHub
commit 340975336f
12 changed files with 97 additions and 99 deletions

View File

@ -18,6 +18,7 @@ module Data.Functor.Listable
, liftCons2
, liftCons3
, liftCons4
, liftCons5
, ListableF(..)
) where
@ -74,6 +75,13 @@ liftCons4 :: [Tier a] -> [Tier b] -> [Tier c] -> [Tier d] -> (a -> b -> c -> d -
liftCons4 tiers1 tiers2 tiers3 tiers4 f = mapT (uncurry4 f) (productWith (\ x (y, z, w) -> (x, y, z, w)) tiers1 (liftCons3 tiers2 tiers3 tiers4 (,,)) ) `addWeight` 1
where uncurry4 f (a, b, c, d) = f a b c d
-- | Lifts a quinary constructor to a list of tiers, given lists of tiers for its arguments.
--
-- Commonly used in the definition of 'Listable1' and 'Listable2' instances.
liftCons5 :: [Tier a] -> [Tier b] -> [Tier c] -> [Tier d] -> [Tier e] -> (a -> b -> c -> d -> e -> f) -> [Tier f]
liftCons5 tiers1 tiers2 tiers3 tiers4 tiers5 f = mapT (uncurry5 f) (productWith (\ x (y, z, w, u) -> (x, y, z, w, u)) tiers1 (liftCons4 tiers2 tiers3 tiers4 tiers5 (,,,)) ) `addWeight` 1
where uncurry5 f (a, b, c, d, e) = f a b c d e
-- | Convenient wrapper for 'Listable1' type constructors and 'Listable' types, where a 'Listable' instance would necessarily be orphaned.
newtype ListableF f a = ListableF { unListableF :: f a }
deriving Show

View File

@ -251,7 +251,8 @@ toTermName source term = case unwrap term of
S.Select clauses -> termNameFromChildren term clauses
S.Array ty _ -> maybe (termNameFromSource term) termNameFromSource ty
S.Class identifier _ _ -> toTermName' identifier
S.Method identifier _ args _ -> toTermName' identifier <> paramsToArgNames args
S.Method identifier (Just receiver) _ args _ -> termNameFromSource receiver <> "." <> toTermName' identifier <> paramsToArgNames args
S.Method identifier Nothing _ args _ -> toTermName' identifier <> paramsToArgNames args
S.Comment a -> toS a
S.Commented _ _ -> termNameFromChildren term (toList $ unwrap term)
S.Module identifier _ -> toTermName' identifier

View File

@ -78,8 +78,9 @@ algorithmWithTerms construct t1 t2 = maybe (recursively t1 t2) (fmap annotate) $
S.Class <$> recursively identifierA identifierB
<*> maybeRecursively paramsA paramsB
<*> bySimilarity expressionsA expressionsB
(S.Method identifierA tyA paramsA expressionsA, S.Method identifierB tyB paramsB expressionsB) -> Just $
(S.Method identifierA receiverA tyA paramsA expressionsA, S.Method identifierB receiverB tyB paramsB expressionsB) -> Just $
S.Method <$> recursively identifierA identifierB
<*> maybeRecursively receiverA receiverB
<*> maybeRecursively tyA tyB
<*> bySimilarity paramsA paramsB
<*> bySimilarity expressionsA expressionsB

View File

@ -65,12 +65,14 @@ termAssignment source category children = case (category, children) of
(Send, [channel, expr]) -> Just $ S.Send channel expr
(Operator, _) -> Just $ S.Operator children
(FunctionTy, _) -> Just $ S.Ty children
(IncrementStatement, _) -> Just $ S.Leaf $ toText source
(DecrementStatement, _) -> Just $ S.Leaf $ toText source
(QualifiedIdentifier, _) -> Just $ S.Leaf $ toText source
(Method, [params, name, fun]) -> Just (S.Method name Nothing (toList (unwrap params)) (toList (unwrap fun)))
(Method, [params, name, outParams, fun]) -> Just (S.Method name Nothing (toList (unwrap params) <> toList (unwrap outParams)) (toList (unwrap fun)))
(Method, [params, name, outParams, ty, fun]) -> Just (S.Method name (Just ty) (toList (unwrap params) <> toList (unwrap outParams)) (toList (unwrap fun)))
(IncrementStatement, _) -> Just $ S.Leaf (toText source)
(DecrementStatement, _) -> Just $ S.Leaf (toText source)
(QualifiedIdentifier, _) -> Just $ S.Leaf (toText source)
(Method, [params, name, fun]) -> Just (S.Method name Nothing Nothing (toList (unwrap params)) (toList (unwrap fun)))
(Method, [params, name, outParams, fun])
-> Just (S.Method name (Just outParams) Nothing (toList (unwrap params)) (toList (unwrap fun)))
(Method, [params, name, outParams, ty, fun])
-> Just (S.Method name (Just outParams) (Just ty) (toList (unwrap params)) (toList (unwrap fun)))
_ -> Nothing
categoryForGoName :: Text -> Category

View File

@ -44,8 +44,8 @@ termAssignment _ category children
, Finally <- Info.category (extract finally)
-> Just $ S.Try [body] [catch] Nothing (Just finally)
(ArrayLiteral, _) -> Just $ S.Array Nothing children
(Method, [ identifier, params, exprs ]) -> Just $ S.Method identifier Nothing (toList (unwrap params)) (toList (unwrap exprs))
(Method, [ identifier, exprs ]) -> Just $ S.Method identifier Nothing [] (toList (unwrap exprs))
(Method, [ identifier, params, exprs ]) -> Just $ S.Method identifier Nothing Nothing (toList (unwrap params)) (toList (unwrap exprs))
(Method, [ identifier, exprs ]) -> Just $ S.Method identifier Nothing Nothing [] (toList (unwrap exprs))
(Class, [ identifier, superclass, definitions ]) -> Just $ S.Class identifier (Just superclass) (toList (unwrap definitions))
(Class, [ identifier, definitions ]) -> Just $ S.Class identifier Nothing (toList (unwrap definitions))
(Import, [ statements, identifier ] ) -> Just $ S.Import identifier (toList (unwrap statements))

View File

@ -68,15 +68,15 @@ termAssignment _ category children
(Method, expr : methodName : rest)
| params : body <- rest
, Params <- Info.category (extract params)
-> Just $ S.Method (withRecord (setCategory (extract expr) MemberAccess) (S.MemberAccess expr methodName)) Nothing (toList (unwrap params)) body
-> Just $ S.Method methodName (Just expr) Nothing (toList (unwrap params)) body
| Identifier <- Info.category (extract methodName)
-> Just $ S.Method (withRecord (setCategory (extract expr) MemberAccess) (S.MemberAccess expr methodName)) Nothing [] rest
-> Just $ S.Method methodName (Just expr) Nothing [] rest
(Method, identifier : rest)
| params : body <- rest
, Params <- Info.category (extract params)
-> Just $ S.Method identifier Nothing (toList (unwrap params)) body
-> Just $ S.Method identifier Nothing Nothing (toList (unwrap params)) body
| otherwise
-> Just $ S.Method identifier Nothing [] rest
-> Just $ S.Method identifier Nothing Nothing [] rest
(Module, constant : body ) -> Just $ S.Module constant body
(Modifier Rescue, [lhs, rhs] ) -> Just $ S.Rescue [lhs] [rhs]
(Rescue, exceptions : exceptionVar : rest)

View File

@ -129,7 +129,7 @@ syntaxToTermField syntax = case syntax of
S.Try body catchExpression elseExpression finallyExpression -> [ "body" .= body ] <> [ "catchExpression" .= catchExpression ] <> [ "elseExpression" .= elseExpression ] <> [ "finallyExpression" .= finallyExpression ]
S.Array ty c -> [ "type" .= ty ] <> childrenFields c
S.Class identifier superclass definitions -> [ "identifier" .= identifier ] <> [ "superclass" .= superclass ] <> [ "definitions" .= definitions ]
S.Method identifier ty parameters definitions -> [ "identifier" .= identifier ] <> [ "type" .= ty ] <> [ "parameters" .= parameters ] <> [ "definitions" .= definitions ]
S.Method identifier receiver ty parameters definitions -> [ "identifier" .= identifier ] <> [ "receiver" .= receiver ] <> [ "type" .= ty ] <> [ "parameters" .= parameters ] <> [ "definitions" .= definitions ]
S.If expression clauses -> [ "expression" .= expression ] <> childrenFields clauses
S.Module identifier definitions-> [ "identifier" .= identifier ] <> [ "definitions" .= definitions ]
S.Import identifier statements -> [ "identifier" .= identifier ] <> [ "statements" .= statements ]

View File

@ -152,8 +152,8 @@ termToDiffInfo blob term = case unwrap term of
toTermName :: forall leaf fields. DefaultFields fields => Source Char -> SyntaxTerm leaf fields -> Text
toTermName source term = case unwrap term of
S.Function identifier _ _ _ -> toTermName' identifier
S.Method identifier _ _ _ -> toTermName' identifier
S.MemberAccess base property -> toTermName' base <> "." <> toTermName' property
S.Method identifier Nothing _ _ _ -> toTermName' identifier
S.Method identifier (Just receiver) _ _ _ -> toTermName' receiver <> "." <> toTermName' identifier
_ -> termNameFromSource term
where
toTermName' = toTermName source

View File

@ -71,8 +71,8 @@ data Syntax a f
| Array (Maybe f) [f]
-- | A class with an identifier, superclass, and a list of definitions.
| Class f (Maybe f) [f]
-- | A method definition with an identifier, optional return type, params, and a list of expressions.
| Method f (Maybe f) [f] [f]
-- | A method definition with an identifier, optional receiver, optional return type, params, and a list of expressions.
| Method f (Maybe f) (Maybe f) [f] [f]
-- | An if statement with an expression and maybe more expression clauses.
| If f [f]
-- | A module with an identifier, and a list of syntaxes.
@ -143,7 +143,7 @@ instance Listable2 Syntax where
\/ liftCons4 (liftTiers recur) (liftTiers recur) (liftTiers recur) (liftTiers recur) Try
\/ liftCons2 (liftTiers recur) (liftTiers recur) Syntax.Array
\/ liftCons3 recur (liftTiers recur) (liftTiers recur) Class
\/ liftCons4 recur (liftTiers recur) (liftTiers recur) (liftTiers recur) Method
\/ liftCons5 recur (liftTiers recur) (liftTiers recur) (liftTiers recur) (liftTiers recur) Method
\/ liftCons2 recur (liftTiers recur) If
\/ liftCons2 recur (liftTiers recur) Module
\/ liftCons2 recur (liftTiers recur) Import

View File

@ -53,7 +53,7 @@
"+"
],
"gitDir": "test/corpus/repos/go",
"shas": "d6222a7346773adfd0929112bedb22129a3519ea..e6c36e250ec3b19c41f32961ccebf3d87daedda7"
"shas": "177fb35939c02b4bc6067142eab57a6cc2237513..2f023a586a3c306c01e1fbf646c7bffc5a6428b3"
}
,{
"testCaseDescription": "go-method-declarations-insert-test",
@ -73,7 +73,7 @@
]
}
},
"summary": "Added the 'Equals(…, …)' method"
"summary": "Added the '(other Person).Equals(…)' method"
}
]
},
@ -95,40 +95,13 @@
"+func (self Person) Equals(other Person) bool {}"
],
"gitDir": "test/corpus/repos/go",
"shas": "e6c36e250ec3b19c41f32961ccebf3d87daedda7..8997e3526ed2c41b2dcdda92e804efb3877995b7"
"shas": "2f023a586a3c306c01e1fbf646c7bffc5a6428b3..d79d8d6400fbf0ee98ec1c1de105b35653bc6abf"
}
,{
"testCaseDescription": "go-method-declarations-replacement-test",
"expectedResult": {
"changes": {
"method-declarations.go": [
{
"span": {
"replace": [
{
"start": [
5,
12
],
"end": [
5,
18
]
},
{
"start": [
5,
12
],
"end": [
5,
15
]
}
]
},
"summary": "Replaced the 'Person' identifier with the 'Num' identifier in the 'Equals(…, …)' method"
},
{
"span": {
"replace": [
@ -154,7 +127,34 @@
}
]
},
"summary": "Replaced the 'Person' identifier with the 'Num' identifier in the 'Equals(…, …)' method"
"summary": "Replaced the 'Person' identifier with the 'Num' identifier in the '(other Num).Equals(…)' method"
},
{
"span": {
"replace": [
{
"start": [
5,
12
],
"end": [
5,
18
]
},
{
"start": [
5,
12
],
"end": [
5,
15
]
}
]
},
"summary": "Replaced the 'Person' identifier with the 'Num' identifier in the '(other Num).Equals(…)' method"
}
]
},
@ -176,40 +176,13 @@
"+func (self Num) Equals(other Num) bool {}"
],
"gitDir": "test/corpus/repos/go",
"shas": "8997e3526ed2c41b2dcdda92e804efb3877995b7..f08fde8bdfc53bd37c4432795460d589a75095aa"
"shas": "d79d8d6400fbf0ee98ec1c1de105b35653bc6abf..4984840b9c1f873e4f0283f9aa56578524bc318a"
}
,{
"testCaseDescription": "go-method-declarations-delete-replacement-test",
"expectedResult": {
"changes": {
"method-declarations.go": [
{
"span": {
"replace": [
{
"start": [
5,
12
],
"end": [
5,
15
]
},
{
"start": [
5,
12
],
"end": [
5,
18
]
}
]
},
"summary": "Replaced the 'Num' identifier with the 'Person' identifier in the 'Equals(…, …)' method"
},
{
"span": {
"replace": [
@ -235,7 +208,34 @@
}
]
},
"summary": "Replaced the 'Num' identifier with the 'Person' identifier in the 'Equals(…, …)' method"
"summary": "Replaced the 'Num' identifier with the 'Person' identifier in the '(other Person).Equals(…)' method"
},
{
"span": {
"replace": [
{
"start": [
5,
12
],
"end": [
5,
15
]
},
{
"start": [
5,
12
],
"end": [
5,
18
]
}
]
},
"summary": "Replaced the 'Num' identifier with the 'Person' identifier in the '(other Person).Equals(…)' method"
}
]
},
@ -257,7 +257,7 @@
"+func (self Person) Equals(other Person) bool {}"
],
"gitDir": "test/corpus/repos/go",
"shas": "f08fde8bdfc53bd37c4432795460d589a75095aa..6894b07b35002c287e007ee22d368fc3ae5de4f3"
"shas": "4984840b9c1f873e4f0283f9aa56578524bc318a..5d97f8471206dc97ee31629ea3a5513e44182603"
}
,{
"testCaseDescription": "go-method-declarations-delete-insert-test",
@ -277,7 +277,7 @@
]
}
},
"summary": "Deleted the 'Equals(…, …)' method"
"summary": "Deleted the '(other Person).Equals(…)' method"
}
]
},
@ -299,7 +299,7 @@
"+"
],
"gitDir": "test/corpus/repos/go",
"shas": "6894b07b35002c287e007ee22d368fc3ae5de4f3..36a54e70abf58b31b21f318fe98685a08ef1949f"
"shas": "5d97f8471206dc97ee31629ea3a5513e44182603..e3c6f620532caea3d241a47bbaa17701dba91928"
}
,{
"testCaseDescription": "go-method-declarations-teardown-test",
@ -356,5 +356,5 @@
"-"
],
"gitDir": "test/corpus/repos/go",
"shas": "36a54e70abf58b31b21f318fe98685a08ef1949f..957e7a284d3bbaebd707764ceac202343581ccdb"
"shas": "e3c6f620532caea3d241a47bbaa17701dba91928..852d29d2b9a695875dd0e15454330bbf7c5e49ff"
}]

View File

@ -1,14 +0,0 @@
[
{
"language": "ruby",
"fileExt": ".rb",
"repoUrl": "https://github.com/diff-fixtures/ruby.git",
"syntaxes": [
{
"syntax": "singleton-method-declaration",
"insert": "def self.foo\nend",
"replacement": "def self.bar(a)\n baz\nend"
}
]
}
]

@ -1 +1 @@
Subproject commit 177fb35939c02b4bc6067142eab57a6cc2237513
Subproject commit 852d29d2b9a695875dd0e15454330bbf7c5e49ff