private static Optional<SchemaNode> findProperty(SchemaNode node) {
        Node propertyNode = null;

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

        if (propertyNode == null 
            || propertyNode.size() == 0 
            || propertyNode.getRange().getStart().equals(propertyNode.getRange().getEnd())) {
            return Optional.empty();
        }

        return Optional.of(propertyNode.get(0).getSchemaNode());

    }
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