Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion resources/examples/project1/src/moduleAtRoot13.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,4 +180,13 @@ def function_to_invoke_in_list_splat(indices):

def variable_to_access_in_tuple_return():
variableToAccessInTuple = 8
return 0, variableToAccessInTuple
return 0, variableToAccessInTuple

def function_with_keyword_argument(arg0, arg1=10):
return arg0 + arg1

variableToAccessInKeywordArgumentCall = 42
function_with_keyword_argument(1, arg1 = variableToAccessInKeywordArgumentCall)

variableToAccessInKeywordArgumentCallInParenthesis = 42
function_with_keyword_argument(1, arg1 = (variableToAccessInKeywordArgumentCallInParenthesis))
38 changes: 38 additions & 0 deletions src/Famix-Python-Importer-Tests/FamixPythonProject1Test.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -5818,6 +5818,44 @@ FamixPythonProject1Test >> testReadAccessInGeneratorExpression [
self assert: accesses size equals: 2
]

{ #category : 'tests - accesses' }
FamixPythonProject1Test >> testReadAccessInKeywordArgument [

| global module access |
global := self globalVariableNamed: 'variableToAccessInKeywordArgumentCall'.
module := self moduleNamed: 'moduleAtRoot13'.

access := (global incomingAccesses select: [ :anAccess | anAccess accessor = module ]) detectMax: [ :anAccess | anAccess sourceAnchor startPos ].

self assert: access class equals: FamixPythonAccess.
self assert: access source equals: module.
self assert: access accessor equals: module.
self assert: access target equals: global.
self assert: access variable equals: global.
self deny: access isWrite.
self assert: access isRead.
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
]

{ #category : 'tests - accesses' }
FamixPythonProject1Test >> testReadAccessInKeywordArgumentInParenthesis [

| global module access |
global := self globalVariableNamed: 'variableToAccessInKeywordArgumentCallInParenthesis'.
module := self moduleNamed: 'moduleAtRoot13'.

access := (global incomingAccesses select: [ :anAccess | anAccess accessor = module ]) detectMax: [ :anAccess | anAccess sourceAnchor startPos ].

self assert: access class equals: FamixPythonAccess.
self assert: access source equals: module.
self assert: access accessor equals: module.
self assert: access target equals: global.
self assert: access variable equals: global.
self deny: access isWrite.
self assert: access isRead.
self assert: (module accesses anySatisfy: [ :anAccess | anAccess variable = global ])
]

{ #category : 'tests - accesses' }
FamixPythonProject1Test >> testReadAccessInLambdaBody [

Expand Down
2 changes: 2 additions & 0 deletions src/Famix-Python-Importer/FamixTSNodeWrapper.extension.st
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ FamixTSNodeWrapper >> isAccessOrReferenceNode [
"I should return true if an Identifier node represent an access or a reference."

(self parent type = #attribute and: [ self parent isInCall ]) ifTrue: [ ^ true ].

(self isInField: #value ofParentOfType: #keyword_argument) ifTrue: [ ^ true ].

^ #( elif_clause list argument_list return_statement lambda if_statement comparison_operator binary_operator assignment not_operator expression_statement
augmented_assignment unary_operator boolean_operator pair list_splat default_parameter dictionary_splat #if_clause #for_in_clause generator_expression
Expand Down
Loading