private static Optional<List<RankNode>> findParameters(SchemaNode node) {
        Node parameterNode = null;

        for (int i = 0; i < node.size(); i++) {
            if (node.get(i).getASTClass() == args.class) {
                parameterNode = node.get(i);
                break;
            }
        }

        if (parameterNode == null) {
            return Optional.empty();
        }

        List<RankNode> ret = new ArrayList<>();

        for (Node child : parameterNode) {
            if (child.getASTClass() == expression.class) {
                ret.add(new RankNode(child.getSchemaNode()));
            }
        }

        return Optional.of(ret);
    }
RankNode represents a node in the Rank pexression AST.
The node can either represent an expression, a feature or a built-in-function

An expression is a rank expression.
A feature is a function with parameters, and an optional property. All parameters must be expressions.
integration/schema-language-server/language-server/src/main/java/ai/vespa/schemals/tree/rankingexpression/RankNode.java