void (@NotNull PyInspectionVisitor visitor, @NotNull PyCallSiteExpression callSite, @NotNull PyTypeCheckerInspection.AnalyzeCalleeResults calleeResults, @NotNull TypeEvalContext context) { for (PyTypeCheckerInspection.AnalyzeArgumentResult argumentResult : calleeResults.getResults()) { if (argumentResult.isMatched()) continue; visitor.registerProblem(argumentResult.getArgument(), getSingleCalleeProblemMessage(argumentResult, context)); } for (PyTypeCheckerInspection.UnexpectedArgumentForParamSpec unexpectedArgumentForParamSpec : calleeResults.getUnmatchedArguments()) { var argument = unexpectedArgumentForParamSpec.getArgument(); var paramSpecTypeName = unexpectedArgumentForParamSpec.getParamSpecType().getVariableName(); visitor.registerProblem(argument, PyPsiBundle.message("INSP.type.checker.unexpected.argument.from.paramspec", paramSpecTypeName)); } if (callSite instanceof PyCallExpression) { var argumentList = ((PyCallExpression)callSite).getArgumentList(); if (argumentList != null) { var rpar = PyPsiUtils.getFirstChildOfType(argumentList, PyTokenTypes.RPAR); if (rpar != null) { for (PyTypeCheckerInspection.UnfilledParameterFromParamSpec unfilledParameterFromParamSpec : calleeResults.getUnmatchedParameters()) { var parameterName = unfilledParameterFromParamSpec.getParameter().getName(); var paramSpecTypeName = unfilledParameterFromParamSpec.getParamSpecType().getVariableName(); if (parameterName != null) { visitor.registerProblem(rpar, PyPsiBundle.message("INSP.type.checker.unfilled.parameter.for.paramspec", parameterName, paramSpecTypeName)); } } for (PyTypeCheckerInspection.UnfilledPositionalVararg unfilledParameterFromParamSpec : calleeResults.getUnfilledPositionalVarargs()) { var varargName = unfilledParameterFromParamSpec.varargName(); var expectedTypes = unfilledParameterFromParamSpec.expectedTypes(); visitor.registerProblem(rpar, PyPsiBundle.message("INSP.type.checker.unfilled.vararg", varargName, expectedTypes)); } } } } }