Skip to content

Commit 28b2ea6

Browse files
committed
Merge 05c653c
2 parents c2296c1 + 05c653c commit 28b2ea6

File tree

4 files changed

+104
-1
lines changed

4 files changed

+104
-1
lines changed

resources/examples/project1/src/moduleAtRoot13.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,19 @@ 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
184+
185+
def function_with_keyword_argument(arg0, arg1=10):
186+
return arg0 + arg1
187+
188+
variableToAccessInKeywordArgumentCall = 42
189+
function_with_keyword_argument(1, arg1 = variableToAccessInKeywordArgumentCall)
190+
191+
variableToAccessInKeywordArgumentCallInParenthesis = 42
192+
function_with_keyword_argument(1, arg1 = (variableToAccessInKeywordArgumentCallInParenthesis))

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

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5749,6 +5749,28 @@ FamixPythonProject1Test >> testReadAccessInDictionarySplat [
57495749
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
57505750
]
57515751
5752+
{ #category : 'tests - accesses' }
5753+
FamixPythonProject1Test >> testReadAccessInExpressionList [
5754+
"same as tuple but it becomes an expression_list node in some cases like in a return:
5755+
def func():
5756+
return a, b
5757+
"
5758+
| local function access |
5759+
local := self localVariableNamed: 'variableToAccessInTuple'.
5760+
function := self functionNamed: 'variable_to_access_in_tuple_return'.
5761+
5762+
access := (local incomingAccesses select: [ :anAccess | anAccess accessor = function ]) detectMax: [ :anAccess | anAccess sourceAnchor startPos ].
5763+
5764+
self assert: access class equals: FamixPythonAccess.
5765+
self assert: access source equals: function.
5766+
self assert: access accessor equals: function.
5767+
self assert: access target equals: local.
5768+
self assert: access variable equals: local.
5769+
self deny: access isWrite.
5770+
self assert: access isRead.
5771+
self assert: (function accesses anySatisfy: [ :anAccess | anAccess variable = local ])
5772+
]
5773+
57525774
{ #category : 'tests - accesses' }
57535775
FamixPythonProject1Test >> testReadAccessInGeneratorExpression [
57545776
@@ -5761,6 +5783,44 @@ FamixPythonProject1Test >> testReadAccessInGeneratorExpression [
57615783
self assert: accesses size equals: 2
57625784
]
57635785
5786+
{ #category : 'tests - accesses' }
5787+
FamixPythonProject1Test >> testReadAccessInKeywordArgument [
5788+
5789+
| global module access |
5790+
global := self globalVariableNamed: 'variableToAccessInKeywordArgumentCall'.
5791+
module := self moduleNamed: 'moduleAtRoot13'.
5792+
5793+
access := (global incomingAccesses select: [ :anAccess | anAccess accessor = module ]) detectMax: [ :anAccess | anAccess sourceAnchor startPos ].
5794+
5795+
self assert: access class equals: FamixPythonAccess.
5796+
self assert: access source equals: module.
5797+
self assert: access accessor equals: module.
5798+
self assert: access target equals: global.
5799+
self assert: access variable equals: global.
5800+
self deny: access isWrite.
5801+
self assert: access isRead.
5802+
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
5803+
]
5804+
5805+
{ #category : 'tests - accesses' }
5806+
FamixPythonProject1Test >> testReadAccessInKeywordArgumentInParenthesis [
5807+
5808+
| global module access |
5809+
global := self globalVariableNamed: 'variableToAccessInKeywordArgumentCallInParenthesis'.
5810+
module := self moduleNamed: 'moduleAtRoot13'.
5811+
5812+
access := (global incomingAccesses select: [ :anAccess | anAccess accessor = module ]) detectMax: [ :anAccess | anAccess sourceAnchor startPos ].
5813+
5814+
self assert: access class equals: FamixPythonAccess.
5815+
self assert: access source equals: module.
5816+
self assert: access accessor equals: module.
5817+
self assert: access target equals: global.
5818+
self assert: access variable equals: global.
5819+
self deny: access isWrite.
5820+
self assert: access isRead.
5821+
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
5822+
]
5823+
57645824
{ #category : 'tests - accesses' }
57655825
FamixPythonProject1Test >> testReadAccessInLambdaBody [
57665826
@@ -5923,6 +5983,25 @@ FamixPythonProject1Test >> testReadAccessInPair [
59235983
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
59245984
]
59255985
5986+
{ #category : 'tests - accesses' }
5987+
FamixPythonProject1Test >> testReadAccessInTuple [
5988+
5989+
| global module access |
5990+
global := self globalVariableNamed: 'variableToAccessInTuple'.
5991+
module := self moduleNamed: 'moduleAtRoot13'.
5992+
5993+
access := (global incomingAccesses select: [ :anAccess | anAccess accessor = module ]) detectMax: [ :anAccess | anAccess sourceAnchor startPos ].
5994+
5995+
self assert: access class equals: FamixPythonAccess.
5996+
self assert: access source equals: module.
5997+
self assert: access accessor equals: module.
5998+
self assert: access target equals: global.
5999+
self assert: access variable equals: global.
6000+
self deny: access isWrite.
6001+
self assert: access isRead.
6002+
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
6003+
]
6004+
59266005
{ #category : 'tests - accesses' }
59276006
FamixPythonProject1Test >> testReadAccessInTypedDefaultParameter [
59286007

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,6 +1009,12 @@ FamixPythonVisitor >> visitEscapeSequence: aNode [
10091009
^ self visitChildren: aNode
10101010
]
10111011

1012+
{ #category : 'visiting - visitChildren' }
1013+
FamixPythonVisitor >> visitExpressionList: aNode [
1014+
1015+
^ self visitChildren: aNode
1016+
]
1017+
10121018
{ #category : 'visiting - visitChildren' }
10131019
FamixPythonVisitor >> visitExpressionStatement: aNode [
10141020

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ FamixTSNodeWrapper >> isAccessOrReferenceNode [
1212
"I should return true if an Identifier node represent an access or a reference."
1313

1414
(self parent type = #attribute and: [ self parent isInCall ]) ifTrue: [ ^ true ].
15+
16+
(self isInField: #value ofParentOfType: #keyword_argument) ifTrue: [ ^ true ].
1517

1618
^ #( elif_clause list argument_list return_statement lambda if_statement comparison_operator binary_operator assignment not_operator expression_statement
1719
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
20+
list_comprehension dictionary_comprehension string_content interpolation subscript tuple expression_list) includes: self parent type
1921
]
2022

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

0 commit comments

Comments
 (0)