add support for named parameters

This commit is contained in:
Erik Krogh Kristensen
2022-05-02 12:56:44 +02:00
parent c1d3738fb8
commit 413d182bcf
3 changed files with 15 additions and 5 deletions

View File

@@ -65,8 +65,14 @@ API::Node getExtraSuccessorFromNode(API::Node node, AccessPathToken token) {
result = node.getMember(token.getAnArgument()).getReturn()
or
token.getName() = ["Argument", "Parameter"] and
token.getAnArgument() = "self" and
result = node.getSelfParameter()
(
token.getAnArgument() = "self" and
result = node.getSelfParameter()
or
exists(string name | token.getAnArgument() = name + ":" |
result = node.getKeywordParameter(name)
)
)
// Some features don't have MaD tokens yet, they would need to be added to API-graphs first.
// - decorators ("DecoratedClass", "DecoratedMember", "DecoratedParameter")
// - Array/Map elements ("ArrayElement", "Element", "MapKey", "MapValue")

View File

@@ -57,5 +57,8 @@ from testlib import ArgPos
val = ArgPos.selfThing(arg, named=2)
class SubClass (ArgPos.MyClass):
def foo(self, arg, named=2):
pass
def foo(self, arg, named=2, otherName=3):
pass
def secondAndAfter(self, arg1, arg2, arg3, arg4, arg5):
pass

View File

@@ -55,7 +55,6 @@ class Sinks extends ModelInput::SinkModelCsv {
}
}
// TODO: Non-positional arguments (including Named parameters)
// TODO: Any argument
// TODO: Test taint steps.
// TODO: // There are no API-graph edges for: ArrayElement, Element, MapKey, MapValue (remove from valid tokens list)
@@ -78,6 +77,8 @@ class Sources extends ModelInput::SourceModelCsv {
"testlib;;Member[CommonTokens].Member[Class].Instance.Method[foo];test-source", //
// testing non-positional arguments
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[foo].Parameter[self];test-source", //
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[foo].Parameter[named:];test-source", //
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[secondAndAfter].Parameter[1..];test-source", //
]
}
}