cel-java icon indicating copy to clipboard operation
cel-java copied to clipboard

Ability to provide type hints to non-identifier keys

Open stopachka opened this issue 1 month ago • 1 comments

Consider a JSON object

{ 
   "with-hyphen": "a-string", 
   "$startsWithDollarSign": 123
}

Problem: It's not possible to provide type-hints for with-hyphen and $startsWithDolalrSign

CEL can get type information well if we can express an object as protobuf, or use StructType. However, there are times when we have objects that have non-identifier keys.

Right now, it's not possible to provide typesafety for non-identifier keys.

It would be amazing if we could.

Alternatives considered

To solve this for ourselves, we considered to hacks:

  1. Use aliases: walk the CEL tree, and rename all non-identifer keys to some known identifer-style key.
  2. Run our own compile step validation: walk the cel tree, and do the type checking ourselves.

Right now we are going with 2., but if there was some built-in way to specify types for keys from index access, it would be amazing.

stopachka avatar Nov 21 '25 19:11 stopachka

As an alternative: you could toggle the following option to allow backticks as an escape mechanism to allow field accesses outside normal identifiers for structs/protobufs: https://github.com/google/cel-java/blob/main/common/src/main/java/dev/cel/common/CelOptions.java#L272

foo.`with-hyphen`

Though at the moment, "$" isn't supported, but this is something we could add: https://github.com/google/cel-java/blob/d7ad94d02c982fd465fcf472802a5be87766ff18/parser/src/main/java/dev/cel/parser/gen/CEL.g4#L207

More generally, we considered adding first-party support for JsonSchema and Open API schema. That would address this use case. I'll keep this open until we add that in.

l46kok avatar Nov 21 '25 22:11 l46kok