Skip to content

Commit 926b2ae

Browse files
authored
Merge pull request #38 from tokyRT/access-in-tuple
Handle read access in tuple and expression_list
2 parents 40faa63 + 01ec3ea commit 926b2ae

File tree

4 files changed

+55
-1
lines changed

4 files changed

+55
-1
lines changed

resources/examples/project1/src/moduleAtRoot13.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,10 @@ def function_to_invoke_in_list_splat(indices):
174174
indices = [0, 2, 4, 6, 8]
175175

176176
var = [*function_to_invoke_in_list_splat(slice, indices[:-1], indices[1:])]
177+
178+
variableToAccessInTuple = 7
179+
aTuple = (1, 2, variableToAccessInTuple, 4)
180+
181+
def variable_to_access_in_tuple_return():
182+
variableToAccessInTuple = 8
183+
return 0, variableToAccessInTuple

src/Famix-Python-Importer-Tests/FamixPythonProject1Test.class.st

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5784,6 +5784,28 @@ FamixPythonProject1Test >> testReadAccessInDictionarySplat [
57845784
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
57855785
]
57865786
5787+
{ #category : 'tests - accesses' }
5788+
FamixPythonProject1Test >> testReadAccessInExpressionList [
5789+
"same as tuple but it becomes an expression_list node in some cases like in a return:
5790+
def func():
5791+
return a, b
5792+
"
5793+
| local function access |
5794+
local := self localVariableNamed: 'variableToAccessInTuple'.
5795+
function := self functionNamed: 'variable_to_access_in_tuple_return'.
5796+
5797+
access := (local incomingAccesses select: [ :anAccess | anAccess accessor = function ]) detectMax: [ :anAccess | anAccess sourceAnchor startPos ].
5798+
5799+
self assert: access class equals: FamixPythonAccess.
5800+
self assert: access source equals: function.
5801+
self assert: access accessor equals: function.
5802+
self assert: access target equals: local.
5803+
self assert: access variable equals: local.
5804+
self deny: access isWrite.
5805+
self assert: access isRead.
5806+
self assert: (function accesses anySatisfy: [ :anAccess | anAccess variable = local ])
5807+
]
5808+
57875809
{ #category : 'tests - accesses' }
57885810
FamixPythonProject1Test >> testReadAccessInGeneratorExpression [
57895811
@@ -5967,6 +5989,25 @@ FamixPythonProject1Test >> testReadAccessInPair [
59675989
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
59685990
]
59695991
5992+
{ #category : 'tests - accesses' }
5993+
FamixPythonProject1Test >> testReadAccessInTuple [
5994+
5995+
| global module access |
5996+
global := self globalVariableNamed: 'variableToAccessInTuple'.
5997+
module := self moduleNamed: 'moduleAtRoot13'.
5998+
5999+
access := (global incomingAccesses select: [ :anAccess | anAccess accessor = module ]) detectMax: [ :anAccess | anAccess sourceAnchor startPos ].
6000+
6001+
self assert: access class equals: FamixPythonAccess.
6002+
self assert: access source equals: module.
6003+
self assert: access accessor equals: module.
6004+
self assert: access target equals: global.
6005+
self assert: access variable equals: global.
6006+
self deny: access isWrite.
6007+
self assert: access isRead.
6008+
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
6009+
]
6010+
59706011
{ #category : 'tests - accesses' }
59716012
FamixPythonProject1Test >> testReadAccessInTypedDefaultParameter [
59726013

src/Famix-Python-Importer/FamixPythonVisitor.class.st

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,6 +1028,12 @@ FamixPythonVisitor >> visitEscapeSequence: aNode [
10281028
^ self visitChildren: aNode
10291029
]
10301030

1031+
{ #category : 'visiting - visitChildren' }
1032+
FamixPythonVisitor >> visitExpressionList: aNode [
1033+
1034+
^ self visitChildren: aNode
1035+
]
1036+
10311037
{ #category : 'visiting - visitChildren' }
10321038
FamixPythonVisitor >> visitExpressionStatement: aNode [
10331039

src/Famix-Python-Importer/FamixTSNodeWrapper.extension.st

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ FamixTSNodeWrapper >> isAccessOrReferenceNode [
1515

1616
^ #( elif_clause list argument_list return_statement lambda if_statement comparison_operator binary_operator assignment not_operator expression_statement
1717
augmented_assignment unary_operator boolean_operator pair list_splat default_parameter dictionary_splat #if_clause #for_in_clause generator_expression
18-
list_comprehension dictionary_comprehension string_content interpolation subscript) includes: self parent type
18+
list_comprehension dictionary_comprehension string_content interpolation subscript tuple expression_list) includes: self parent type
1919
]
2020

2121
{ #category : '*Famix-Python-Importer' }

0 commit comments

Comments
 (0)